2010-02-10 140 views
0

好着,当然它不工作,即时通讯仍然是一个的n00b :)htaccess的不工作,因为它应该

这是我的代码:

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 但它不会工作,如果我尝试本地主机/ abc/

也,当我尝试本地主机/ abc/def(或本地主机/ abc/def /为此事)css文件不被正确包含。我得到一个错误,说/abc/def/style.css不存在。 (

但是,代码不起作用,如果我从最后一条规则中删除QSA标志这是在大量的谷歌搜索和阅读后提出的代码如果任何人都可以帮忙我会非常感谢。

感谢!

回答

0

排序您的尾随斜线问题与 (/)?而不是/单独

?=零或前面的字符

+0

哎。我也尝试过。但由于某种原因,它不工作。 – hsn 2010-02-10 11:41:07

+0

你做了吗 RewriteRule(。*)/(。*)(/)?$ index.html?page = $ 2 [L] – 2010-02-10 11:43:55

+0

是的,这就是我试过shaunhare.co.uk – hsn 2010-02-10 11:48:56

0

你应该使用更具体的一个模式。.*表示零个或多个任意字符。这匹配任何东西,甚至是空字符串。

对于您的情况,abc/可能与规则匹配的模式为(.*)/(.*),而不是您可能假设的规则(.*)/

尝试[^/]+代替(除了/一个或多个字符)和添加断言来开始(^)和结束的字符串($):

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] 
+0

嘿秋葵。我尝试了你建议的规则。不幸的是,无论我尝试什么网址,它都会被重定向到index.html。 有什么建议吗?感谢迄今为止所有的帮助! – hsn 2010-02-10 11:48:20

+0

嘿秋葵。经过一些调整,我得到了这些规则的工作: RewriteRule ^([^ /] +)/([^ /] +)(/)?$ index.html?page = $ 2 [L,QSA] RewriteRule^[^ /] +)(/)?$ index.html?page = $ 1 [L,QSA] RewriteRule ^(。*)(/)?$ index.html?page = home [L,QSA] 但该css文件也正在重写(例如:/abc/styles.css)任何建议? – hsn 2010-02-10 11:58:56

+0

@hsn:你不需要把单个'/'放在一个像'(/)'这样的组中; '/?'也可以。如果请求可以映射到现有文件,则可以使用一条规则停止重写过程:'RewriteCond%{REQUEST_FILENAME} -f RewriteRule^- [L]'将此规则放在其他人面前,它应该可以工作。那么你甚至不需要前两条规则。 – Gumbo 2010-02-10 12:14:21

相关问题