Apache htaccess不能正常工作
嗯,当然不行了,我还是个n00b:) 这是我的代码:Apache htaccess不能正常工作,apache,.htaccess,mod-rewrite,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
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标志,代码就不起作用了。这是我在谷歌搜索和阅读了很多遍后得出的代码。如果有人能帮我,我将非常感激
谢谢!用 (/)?而不是单独
?=零或前面的一个字符您应该使用更具体的模式。
*
表示零或更多任意字符。它匹配任何字符,甚至空字符串
在您的情况下,abc/
可能与模式为(.*)/(.*)
的规则匹配,而不是与您可能假设的(.*)/
的规则匹配
请尝试使用[^/]+
(除/
之外的一个或多个字符),并为字符串的开头(^
)和结尾($
)添加断言:
正如shaunhare.co.uk已经说过的,您可以通过在后面添加?
量词来设置尾随的/
可选:
RewriteRule ^([^/]+)/([^/]+)/?$ index.html?page=$2 [L]
RewriteRule ^([^/]+)/?$ index.html?page=$1 [L]
你有没有重写规则(.*)/(.*)?$index.html?page=$2[L]嘿,gumbo。我尝试了你建议的规则。不幸的是,不管我尝试什么url,它都会被重定向到index.html。有什么建议吗?谢谢你迄今为止的所有帮助!嘿,gumbo。经过一点调整,我让这些规则起作用了: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:你不需要将单个
/
放入(/)这样的组中
;/?
也可以工作。如果请求可以映射到现有文件,则可以使用停止重写过程的规则:RewriteCond%{request\u FILENAME}-f RewriteRule^-[L]
将此规则放在其他规则前面,它应该会起作用。然后你甚至不需要前两条规则。嘿,gumbo。我尝试了新规则。现在它导致了一个内部服务器错误:S@hsn:您需要在各自的行中写入每个指令。
RewriteRule ^([^/]+)/([^/]+)/?$ index.html?page=$2 [L]
RewriteRule ^([^/]+)/?$ index.html?page=$1 [L]