这是我的代码:
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*)\.css - [S=7]
RewriteRule (.*)\.jpg - [S=6]
RewriteRule ^gallery gallery.html [L]
RewriteRule (.*)/(.*)/ index.html?page=$2 [L]
RewriteRule (.*)/(.*) index.html?page=$2 [L]
RewriteRule (.*)/ index.html?page=$1 [L]
RewriteRule (.*) index.html?page=$1 [L,QSA]
现在,如果我尝试localhost / abc,这样可以正常工作 但如果我尝试localhost / abc /
,它就无法工作另外,当我尝试localhost / abc / def(或localhost / abc / def /)时,css文件没有被正确包含。我得到一个错误,说/abc/def/style.css不存在。 :(
但是,如果我从最后一条规则中删除QSA标志,则代码无效。这是我经过大量谷歌搜索和阅读后得出的代码。如果有人能帮忙,我会非常感激。
谢谢!
答案 0 :(得分:0)
使用。排序您的尾部斜杠问题 (/)?而不是/单独
?=零或前面的一个char
答案 1 :(得分:0)
您应该使用更具体的模式。 .*
表示零个或多个任意字符。这匹配任何东西,甚至是空字符串。
在您的情况下,abc/
可能与模式(.*)/(.*)
的规则匹配,而不是您可能假设的(.*)/
规则。
尝试使用[^/]+
(除了/
之外的一个或多个字符)并为开头(^
)和字符串结尾($
)添加断言:< / p>
RewriteRule ^([^/]+)/([^/]+)/$ index.html?page=$2 [L]
RewriteRule ^([^/]+)/([^/]+)$ index.html?page=$2 [L]
RewriteRule ^([^/]+)/$ index.html?page=$1 [L]
RewriteRule ^([^/]+)$ index.html?page=$1 [L,QSA]
正如shaunhare.co.uk已经说过的那样,您可以通过将/
量词附加到其中来设置尾随?
可选:
RewriteRule ^([^/]+)/([^/]+)/?$ index.html?page=$2 [L]
RewriteRule ^([^/]+)/?$ index.html?page=$1 [L]