htaccess不能正常工作

时间:2010-02-10 11:19:16

标签: apache .htaccess mod-rewrite

好吧,当然它不起作用,我仍然是一个n00b:)

这是我的代码:

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标志,则代码无效。这是我经过大量谷歌搜索和阅读后得出的代码。如果有人能帮忙,我会非常感激。

谢谢!

2 个答案:

答案 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]