2014-03-30 44 views
1

好的,所以我已经看了很长一段时间了这个话题,可能因为我仍然很难理解它 - 所以我回去了以最简单的方式提出基本要求。用.htaccess重写网址

我有一个空的.htaccess文件 我有http://www.website.co.uk/news.php?id=111111 当前URL我希望这成为http://www.website.co.uk/news/111111

我如何做到这一点?

也请不,虽然这是现在的URL,我打算做一些更改网站,网址在未来可能是:

http://www.website.co.uk/news.php?city=city&issue=1&title=the-title&id=111111

http://www.website.co.uk/news/city/issue/the-title/111111

如何我可以做到这一点,以便未来的变化也能工作吗?到目前为止,我有:

RewriteEngine On 
RewriteRule ^news/(.+)$ news.php?id=$1 [L] 

这仍然显示完整的url和在news/111111重定向到错误页面中键入。请帮忙!

+1

可能的重复[参考:mod \ _rewrite,URL重写和“漂亮链接”解释](http://stackoverflow.com/questions/20563772/reference-mod-rewrite-url-rewriting-and-pretty-links - 解释) – deceze

+0

@deceze你能回答[这](http://webmasters.stackexchange.com/questions/59543/apache-url-rewriting-not-working)的问题? –

+0

@deceze你能解释一下我的例子吗?我已经尝试了几个教程/解释的博客,但似乎没有工作 – user3177012

回答

0

添加以下到您的htaccess应该工作:

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^id=(.*)$ 
RewriteRule ^news.php$ /news/%1? [L,R] 

RewriteRule ^news/(.*) news.php?id=$1 [QSA] 

以上将改变http://www.website.co.uk/news.php?id=111111http://www.website.co.uk/news/111111

和下方将改变

RewriteCond %{QUERY_STRING} ^city=(.*)&issue=(.*)&title=(.*)&id=(.*)$ 
RewriteRule ^news.php$ /news/%1/%2/%3/%4 [L,R] 

RewriteRule ^news/(.*)/(.*)/(.*)/(.*) news.php?city=$1&issue=$2&title=$3&id=$4 [QSA] 

http://www.website.co.uk/news.php?city=city&issue=1&title=the-title&id=111111http://www.website.co.uk/news/city/issue/the-title/111111

%1,%2,$3,%4中的值取自city=,issue=后的参数。 title=id=

city=LondonLondon将包含在%1

第二重写规则将让你找到id使用。

+0

Thnak你!这似乎在某种程度上工作,但是,我被重定向到一个错误页面里面的新闻 - 我认为由于我有一个$ id = $ _GET [“id”];声明。我怎样才能解决这个问题? – user3177012

+0

这适用于重定向,但它重定向到错误页面,因为我有'if(isset($ _ GET [“id”])){ $ id = $ _GET [“id”]; } else { header(“Location:redirect.php?type = error”);' - 我如何确保它能够识别ID? – user3177012

+0

对不起,试试我的编辑。我添加了一行。 – Howli