Mod rewrite 用php重写Url

Mod rewrite 用php重写Url,mod-rewrite,url-rewriting,url-routing,Mod Rewrite,Url Rewriting,Url Routing,这个htaccess有什么问题? 我正试图重定向所有有问号的东西,比如 “www.mysite.com/?bla=bla” 到 “www.mysite.com/router.php?bla=bla AddDefaultCharset UTF-8 RewriteEngine On RewriteRule ^([\w]{1,7})$ short.php?p=$1 [L] RewriteRule ^([\w]+)\.html$ html/$1.html [L] RewriteRule ^([\w]+)

这个htaccess有什么问题? 我正试图重定向所有有问号的东西,比如 “www.mysite.com/?bla=bla” 到 “www.mysite.com/router.php?bla=bla

AddDefaultCharset UTF-8
RewriteEngine On
RewriteRule ^([\w]{1,7})$ short.php?p=$1 [L]
RewriteRule ^([\w]+)\.html$ html/$1.html [L]
RewriteRule ^([\w]+)\.php$ php/$1.php [L]
RewriteRule ^\?(.+)$ router.php?$1 [L]
每个规则都有效,但最后一个规则除外,它返回一个:

Forbidden

You don't have permission to access / on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

您无法访问
重写规则
中的查询字符串。相反,请使用
重写条件
对其进行匹配。在所处位置使用
将其视为正则表达式的特殊字符

而是使用:

# Prevent redirect loop
# Place above all other rules
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Non-empty querystring goes to router
RewriteCond %{QUERY_STRING} ^(.+)
# Rewrite to router appending existing querystring (QSA)
RewriteRule ^/?$ router.php [L,QSA]
增编: 防止路由器进入php目录,包括:

RewriteCond %{REQUEST_FILENAME} !^router\.php
RewriteRule ^([\w]+)\.php$ php/$1.php [L]

这是离题的,你的问题与PHP无关。重定向有效:问题是它递归地进入第三条语句,指向PHP文件夹。但是这个PHP文件在根目录中。我如何停止每个不必递归调用的条件?已经存在了googling@hysoka44见上面增加的回路预防。Thanks michael,但它似乎不起作用。在每次重写URL之前,“阻止”部分不应该在htaccess的顶部吗?@hysoka44是的,它应该-我假设这是暗示的,抱歉不清楚。它也不起作用,它仍然进入php文件夹状态。