1

这个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.
4

1 回答 1

2

您无法访问RewriteRule. 相反,使用RewriteCond它来匹配它。在您拥有的位置使用?它会将其视为正则表达式的特殊字符。

而是使用:

# 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]
于 2012-05-17T15:26:47.497 回答