.htaccess不适用于特定情况
在使用.htaccess文件时,我遇到了一个奇怪的问题 这是我的档案:.htaccess不适用于特定情况,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,在使用.htaccess文件时,我遇到了一个奇怪的问题 这是我的档案: <IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine On RewriteRule ^(admin)($|/) - [L] RewriteRule ^$ ./web/view/ RewriteRule ^([A-Za-z0-9]+)$ ./web/view/?module=$1 RewriteRule ^([A-Za-z0-9]+)/$
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^(admin)($|/) - [L]
RewriteRule ^$ ./web/view/
RewriteRule ^([A-Za-z0-9]+)$ ./web/view/?module=$1
RewriteRule ^([A-Za-z0-9]+)/$ ./web/view/?module=$1
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)/([0-9]+)$ ./web/view/?module=$1&id1=$2&id2=$3
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)/([0-9]+)/$ ./web/view/?module=$1&id1=$2&id2=$3
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)$ ./web/view/?module=$1&id1=$2
RewriteRule ^([A-Za-z0-9]+)/([0-9]+)/$ ./web/view/?module=$1&id1=$2
ErrorDocument 404 err.php
</IfModule>
但是,如果我使用A-Z
,它可以正常工作
RewriteRule ^([A-Za-z0-9]+)/([A-Z0-9]+)/$ ./web/view/?module=$1&id1=$2
甚至[NC]
也给了我同样的错误
你能帮我找出并纠正这个问题吗
现在在最后一条规则中,如果我将[a-z]
与[0-9]
一起添加,我将得到一个500错误。例如,下一行将给我500个错误:
RewriteRule ^([A-Za-z0-9]+)/([a-z0-9]+)/$ ./web/view/?module=$1&id1=$2
原因是重写引擎将进入无限循环:
/something/id/
(注意后面的斜杠)RewriteRule^([A-Za-z0-9]+)/([A-z0-9]+)/$。/web/view/?module=$1&id1=$2
/web/view/?module=something&id=id
/web/view/
RewriteRule^([A-Za-z0-9]+)/([A-z0-9]+)/$。/web/view/?module=$1&id1=$2
/web/view/?module=web&id=view
RewriteCond %{REQUEST_URI} !/web/view
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9]+)/$ ./web/view/?module=$1&id1=$2
我的第一反应是在每个重写行的末尾添加一个[L],例如:
RewriteRule ^([A-Za-z0-9]+)$ ./web/view/?module=$1 [L]
RewriteRule ^$ ./web/view/ [L,QSA]
这很好,因为您的重写是相互独立的
第二步是合并每组RewriteRule指令,其中正斜杠(/)是可选的,因此不是:
RewriteRule ^([A-Za-z0-9]+)$ ./web/view/?module=$1
RewriteRule ^([A-Za-z0-9]+)/$ ./web/view/?module=$1
同样可以肯定地说:
RewriteRule ^([A-Za-z0-9]+)/?$ ./web/view/?module=$1
问号(?)表示0或1,但不超过前面的字符、组或表达式
最后,您可以考虑优化ReWrruleRead指令组:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^(admin)($|/) - [L]
RewriteRule ^$ ./web/view/ [L]
RewriteRule ^([A-Za-z0-9]+)/?((([A-Za-z0-9]+)/?)?(([A-Za-z0-9]+)/?)?)?$ ./web/view/?module=$1&id1=$4&id2=$6 [L]
ErrorDocument 404 err.php
</IfModule>
您也可以考虑使用,帮助您创建、测试或排除正则表达式。
最后,在.htaccess文件中,根据AllowOverrides指令的定义,您可以启用: 但是,根据您的apache服务器版本或配置,您可能需要使用RewriteLog/级别,因为RewriteLog/级别已被弃用:LogLevel alert rewrite:trace4
作为免责声明,此级别的日志记录将降低您的Web服务器的速度,因此不要在生产环境中启用太长时间
LogLevel alert rewrite:trace4