.htaccess文件中发生了一些奇怪的事情
不起作用的文件
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/([a-z0-9_-]+)$ $1/post?id=$2 [L,QSA]
RewriteRule ^(.*?)/edit/([a-z0-9_-]+)$ $1/editpost.php?id=$2 [L,QSA]
#RewriteRule ^users/(\d+)*$ ./profile.php?id=$1
但这有效
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/edit/([a-z0-9_-]+)$ $1/editpost.php?id=$2 [L,QSA]
RewriteRule ^(.*?)/([a-z0-9_-]+)$ $1/post?id=$2 [L,QSA]
#RewriteRule ^users/(\d+)*$ ./profile.php?id=$1
我只是重新安排了重写规则并修复了问题。谁能解释为什么会这样?我被困在这里超过2小时。
我是网址重写的新手,请详细说明。实际上[L,QSA]的作用是什么?
答案 0 :(得分:1)
RewriteCond
仅适用于最近的RewriteRule
。因此,在您的第一个示例中,它仅适用于此规则:
RewriteRule ^(.*?)/([a-z0-9_-]+)$ $1/post?id=$2 [L,QSA]
两个底部RewriteRule
在没有任何RewriteCond
的情况下执行,并导致无限循环。
您可以将规则视为:
RewriteEngine On
RewriteBase /
# skip all files and directories from rules below
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
RewriteRule ^(.*?)/edit/([\w-]+)/?$ $1/editpost.php?id=$2 [L,QSA]
RewriteRule ^users/(\d+)/?$ profile.php?id=$1 [L,QSA]
RewriteRule ^(.*?)/([\w-]+)/?$ $1/post?id=$2 [L,QSA]