破碎.htaccess重写

时间:2016-10-03 22:00:22

标签: php .htaccess

我目前的.htaccess看起来像这样:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301]
RewriteRule /([^/.]+)/?$ /restaurants.php?id=$1 [L,NC,QSA]
RewriteCond %{THE_REQUEST} ^.*/index\.php 
RewriteRule ^(.*)index.php$ /$1 [R=301,L] 

我希望我的网址对SEO友好,我想出了如何将example.com/restaurants.php?id=123重写为www.example.com/name/123。

问题是当你去非www example.com/name/123时,它会重定向到丑陋的url example.com/restaurants.php?id=123,然后重定向回SEO友好的清洁www。 example.com/name/123

如何修复非www版本?

谢谢你的时间!

2 个答案:

答案 0 :(得分:0)

谈论" www"你可以在这看到一些东西: .htaccess Remove WWW from URL + Directories

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,QSA,NC,L]

对于URL,您可以执行以下操作:

RewriteRule  ^some_alias/([0-9]+)/?$  real_page_name.php?id=$1

在您的情况下(您已使用"名称"代替" restaurants.php"),只需:

RewriteRule  ^name/([0-9]+)/?$  restaurants.php?id=$1

在这里你可以得到很多解释和例子: https://www.addedbytes.com/articles/for-beginners/url-rewriting-for-beginners/

答案 1 :(得分:0)

按此顺序制定规则:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]

RewriteCond %{THE_REQUEST} ^.*/index\.php 
RewriteRule ^(.*)index.php$ /$1 [R=301,L,NE] 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /([^/.]+)/?$ /restaurants.php?id=$1 [L,NC,QSA]

请务必清除浏览器缓存,然后再对其进行测试。