我有以下.htaccess文件,这会产生一种奇怪的行为。
DirectoryIndex index.php index.html
AddCharset UTF-8 .html
AddCharset UTF-8 .php
AddCharset UTF-8 .css
AddCharset UTF-8 .js
AddType image/svg+xml svg
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /Hunpony/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)\/$ $1 [R=301] # Remove trailing slash
RewriteRule ^$ do.php?do=news [QSA] # Default page
RewriteRule ^([\wáéíóöőúüű.]+|-?\d+)(?:\/((?:[\wáéíóöőúüű]+|-?\d+)(?:\/(?:[\wáéíóöőúüű]+|-?\d+))?))?\/?$ do.php?do=$1&data=$2 [NC,L,QSA]
</IfModule>
ErrorDocument 404 /Hunpony/404
我认为如果请求的文件存在,那些RewriteCond
会阻止Apache执行重写,但似乎并非如此。
此文件放在我的服务器的/Hunpony/
子文件夹中,与do.php
一起处理页面请求。以下是重定向的工作原理示例:它将/Hunpony/profile/1/setings
重定向到/Hunpony/do.php?do=profile&data=1/settings
。问题是我还希望在第一场比赛中允许点,因此/Hunpony/f.a.q
会被重定向到/Hunpony/do.php?do=f.a.q&data=
。
我面临的问题是,由于某些奇怪的原因,该网站的网站图标(/Hunpony/favicon.ico
)正在返回404错误,尽管它已经链接到了哪里&# #39;应该是。
我能想到的唯一可能的解释是Apache将/Hunpony/favicon.ico
重写为/Hunpony/do.php?do=favicon.ico&data=
,即使该文件存在于服务器上,并且因为在do.php
中没有对于名为favicon.ico
的页面的特殊情况,它默认为404错误页面。页面的其他资源不受此影响,因为它们位于名称中没有点的子目录下。
答案 0 :(得分:1)
这是因为RewriteCond
仅适用于下一个RewriteRule
。您可以遵守以下规则:
DirectoryIndex index.php index.html
AddCharset UTF-8 .html
AddCharset UTF-8 .php
AddCharset UTF-8 .css
AddCharset UTF-8 .js
AddType image/svg+xml svg
ErrorDocument 404 /Hunpony/404
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /Hunpony/
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]
RewriteRule ^(.+?)/$ $1 [L,R=301]
RewriteRule ^$ do.php?do=news [QSA,L]
RewriteRule ^([\wáéíóöőúüű.]+|-?\d+)(?:\/((?:[\wáéíóöőúüű]+|-?\d+)(?:\/(?:[\wáéíóöőúüű]+|-?\d+))?))?\/?$ do.php?do=$1&data=$2 [NC,L,QSA]
</IfModule>