Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache htaccess不能正常工作_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Apache htaccess不能正常工作

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

嗯,当然不行了,我还是个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标志,代码就不起作用了。这是我在谷歌搜索和阅读了很多遍后得出的代码。如果有人能帮我,我将非常感激


谢谢!

用 (/)?而不是单独


?=零或前面的一个字符

您应该使用更具体的模式。
*
表示零或更多任意字符。它匹配任何字符,甚至空字符串

在您的情况下,
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]