我遇到重写问题。 这是我的.htaccess文件
RewriteEngine On
RewriteBase /
#ignore non-existent utility-files
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|s?html|css|js|cgi|png|ico|txt)$
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* - [L]
#load existent utility files and don't rewrite them to index.php
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|s?html|css|js|cgi|png|ico|txt)$
RewriteRule ^(.*) $1 [L]
#load other files if they exist
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*) $1 [L]
#load index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]
最后一部分正在运行,但我想避免在代码请求不存在的图像时加载我的index.php(如:www.mysite.test / images / foobar.png)
第一个RewriteCond-Line应检查请求是否与图像,JavaScript等文件匹配,第二个RewriteCond行应检查文件是否不存在。 第三个应检查文件夹是否存在。 如果匹配成功,则应加载NOTHING。
只有文件夹存在时才有效。如果图像文件夹不存在则无法正常工作。
任何有帮助的帮助。提前谢谢
编辑:找到了解决方案 好的,我有这个工作:#<IfModule mod_php4.c>
# php_value session.use_trans_sid 0
#</IfModule>
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
RewriteEngine On
RewriteBase /
#load files if they exist
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*) $1 [L]
#ignore non-existent utility-files
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule \.(gif|jpe?g|s?html|css|js|cgi|png|ico|txt)$ - [L]
#load index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]
关键的一点是,如果目录不存在,我们在RewriteRule中提供一个要忽略的模式:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule \.(gif|jpe?g|s?html|css|js|cgi|png|ico|txt)$ - [L]
答案 0 :(得分:0)
您有许多冗余规则。您可以简化到:
RewriteEngine On
RewriteBase /
#ignore non-existent utility-files
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|s?html|css|js|cgi|png|ico|txt)$ [NC]
RewriteRule ^ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
答案 1 :(得分:0)
好的,现有文件仍有问题,正如会员anubhava所说。 我的最终解决方案是:
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
RewriteEngine On
RewriteBase /
#load files if they exist
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*) $1 [L]
#ignore non-existent utility-files
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule \.(gif|jpe?g|s?html|css|js|cgi|png|ico|txt|php)$ - [L]
#load index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]
此解决方案包含第二次重写规则中的php文件。因为我有一些实际上是css文件并由浏览器加载的php文件。