尝试从“example.com/about”到“example.com?p=about”进行内部重定向

时间:2018-03-23 10:39:22

标签: .htaccess redirect mod-rewrite internal internal-server-error

我正在尝试从“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,一切正常

1 个答案:

答案 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]