我正在尝试从“example.com/about”到“example.com?p=about”进行内部重定向(不更改客户端浏览器中的网址)。
我将以下代码添加到我的.htaccess文件中:
RewriteEngine On
RewriteCond %{THE_REQUEST} !\?
RewriteRule ([^\/]*)$ http://%{HTTP_HOST}?p=$1 [L]
但如果我打开页面(example.com/about),我收到内部服务器错误
有谁知道我做错了什么?
感谢您的帮助
编辑:如果我将R标志添加到RewriteRule,一切正常
答案 0 :(得分:0)
您收到错误,因为您的规则只是添加查询字符串,然后再次捕获任何URI,甚至在此之前通过此规则,您的规则应如下所示:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)$ http://%{HTTP_HOST}?p=$1 [L]
要更具体,能够通过任何其他规则处理真正的错误请求,请执行以下操作:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} !p=(.*)
RewriteRule ^([^/]*)$ http://%{HTTP_HOST}?p=$1 [L]