问题重定向&查询字符串

时间:2014-07-30 11:17:41

标签: apache .htaccess mod-rewrite redirect

在我们的CMS上,我们使用以下的.htaccess代码来提供来自CMS的页面:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/?$ index.php?slug=$1

因此,通过将页面的段落传递给index.php

来提供页面

我们遇到的问题是,如果您转到此页面,例如:

http://www.example.com/index.php?slug=contact

您被重定向到此页面:

http://www.example.com/?slug=contact

我们在.htaccess中也有这个将index.php发送回root:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index.php
RewriteRule ^index.php$ http://www.example.com/ [R=301,L]

我们如何才能最终获得此网址:

http://www.example.com/contact

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您可以在root .htaccess中使用此代码:

RewriteEngine On
RewriteBase /

# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(?:index\.php)?\?slug=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=302,L]

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

# internal forward from pretty URL to actual one
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/([^/]+)/?$ index.php?slug=$1 [L,QSA]