好吧,我正在尝试清理我的网址......但是失败了:我想要一个看起来像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]
答案 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]
如果没有?
,查询字符串就会自动附加到结尾。