我有一个非常具体的问题。 标题提供了许多其他正确答案的问题,但我不知道如何将其与我自己的重写规则相符合。
我的.htaccess看起来像这样:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^[^/]*/?$ index.php [NC,L]
RewriteCond %{REQUEST_URI} !(^/dev/zeroyear/$)
RewriteRule ^dev/zeroyear/([^/]+)/?([^/]*)/?([^/]*)/?([^/]*)/?$ /dev/zeroyear/index.php?var1=$1&var2=$2&var3=$3&var4=$4 [L,QSA]
我希望以下2个网址重定向到同一页面:
http://timesheep.name/dev/zeroyear/news
http://timesheep.name/dev/zeroyear/news/
最后一次重写规则因为我输入的问号而导致500,但日志没有说明。如果我改成它:
RewriteRule ^dev/zeroyear/([^/]+)/([^/]*)/?([^/]*)/?([^/]*)/?$ /dev/zeroyear/index.php?var1=$1&var2=$2&var3=$3&var4=$4 [L,QSA]
错误消失,但http://timesheep.name/dev/zeroyear/news将返回404。
我该怎么办?
答案 0 :(得分:1)
你有混合的非贪婪的比赛(会占用可选的/
)和可选的/
混合在一起。尝试将它们分成不同的匹配项:
RewriteCond %{REQUEST_URI} !(^/dev/zeroyear/$)
RewriteRule ^dev/zeroyear/([^/]+)/([^/]+)/([^/]+)/([^/]+?)/?$ /dev/zeroyear/index.php?var1=$1&var2=$2&var3=$3&var4=$4 [L,QSA]
RewriteCond %{REQUEST_URI} !(^/dev/zeroyear/$)
RewriteRule ^dev/zeroyear/([^/]+)/([^/]+)/([^/]+?)/?$ /dev/zeroyear/index.php?var1=$1&var2=$2&var3=$3 [L,QSA]
RewriteCond %{REQUEST_URI} !(^/dev/zeroyear/$)
RewriteRule ^dev/zeroyear/([^/]+)/([^/]+?)/?$ /dev/zeroyear/index.php?var1=$1&var2=$2 [L,QSA]
RewriteCond %{REQUEST_URI} !(^/dev/zeroyear/$)
RewriteRule ^dev/zeroyear/([^/]+?)/?$ /dev/zeroyear/index.php?var1=$1 [L,QSA]