HTACCESS删除扩展并更改查询结果

时间:2013-09-30 00:09:27

标签: .htaccess

好吧,我正在尝试清理我的网址......但是失败了:我想要一个看起来像mysite.com/front_door/some_url_here的网址。但我一直收到500错误。下面是我的.HTACCESS,我确定我做错了,因为这只是我第三次或第四次使用HTACCESS。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*[^/]) $1.php [L]
RewriteCond %{REQUEST_URI} ^/index\.php$
RewriteCond %{QUERY_STRING} ^pid=(([0-9a-zA-Z\-]+))$
RewriteRule ^(.*)$ http://localhost/page/%1.php [R=302,L]

1 个答案:

答案 0 :(得分:0)

这就是造成500服务器错误的原因:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*[^/]) $1.php [L]

由于您的正则表达式与请求的开头或结尾不匹配,因此它可以与任何匹配。这意味着如果你去

http://mysite.com/index.php?pid=1234

然后重定向到

http://localhost/page/1234.php?pid=1234

请求/page/1234.php通过正则表达式(.*[^/])与第一条规则匹配,并被重写为/page/1234.php.php。然后重写引擎循环,同样的事情再次发生,第一个规则匹配,然后重写为:/page/1234.php.php.php并继续前进,直到你得到500错误。

不确定您是在尝试使用该规则是什么,但猜测是您希望能够请求/file并获得服务/file.php。你的规则必须是这样的:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*[^/])$ $1.php [L]

此外,您的查询字符串将继续位于第二个规则的重定向结束时,因为您需要在目标的末尾添加?

RewriteRule ^(.*)$ http://localhost/page/%1.php? [R=302,L]

如果没有?,查询字符串就会自动附加到结尾。