URL重写解析为地址栏中的实际URL

时间:2014-08-19 08:49:42

标签: php regex apache .htaccess mod-rewrite

我有一个奇怪的问题,在某些用户计算机上,重写的网址会解析为地址栏中的实际网址。

我的htaccess文件中有以下内容

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

我注意到这些出现在我的分析中,这弄乱了我的统计数据,因为一页有两个网址。

这方面的一个例子是:

http://example.com/news/the-first-post

http://example.com/index.php?url=news/the-first-post

我有时可以通过直接在地址栏中输入重写的URL来复制问题。

1 个答案:

答案 0 :(得分:1)

你的规则如下:

RewriteEngine On

RewriteCond %{THE_REQUEST} \s/+index\.php\?url=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=301,L,NE]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

现在,所有/index.php?url=news/the-first-post结构的网址都将301(永久)重定向到/news/the-first-post