如何在rewriterrule中添加排除子目录中不存在的文件的条件?



如果页面不存在,我希望排除被调用的规则。在我现有的htaccess中,当用户从根目录访问不存在的页面时,该规则会正常工作。奇怪的是,如果用户试图访问一个不存在的有效页面的子目录,它将不起作用。

我的htaccess:

的当前行为
example.com/valid-page/ -> example.com/valid-page/ (good)
example.com/valid-page -> example.com/valid-page/ (good)
example.com/valid-page/valid-page -> example.com/valid-page/valid-page/ (good)
example.com/does-not-exist -> example.com/does-not-exist (good)
example.com/valid-page/does-not-exist -> example.com/valid-page/does-not-exist/ (boo!)
对于上面的错误示例,期望的结果应该是不包含正斜杠:
example.com/valid-page/does-not-exist -> example.com/valid-page/does-not-exist

这里是。htaccess:

# Redirects for errors
ErrorDocument 404 /error.php
ErrorDocument 403 /error.php
# Hides directory file listings
Options -Indexes
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
# Force slash at end of URL
RewriteCond %{REQUEST_URI} /+[^.]+$
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}s([^.]+).php [NC]
RewriteRule ^ %1 [R,L]
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([^.]+)/$ $1.php [NC,L]
# Force slash at end of URL
RewriteCond %{REQUEST_URI} /+[^.]+$
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]

您需要更改检查REQUEST_FILENAME的第二个条件,因为当您请求/valid-page/does-not-exist时,REQUEST_FILENAME.../valid-page,而不是您期望的.../valid-page/does-not-exist

使用REQUEST_URI(或$1反向引用)代替REQUEST_FILENAME并构造绝对文件名。例如:

# Force slash at end of URL
RewriteCond %{REQUEST_URI} /+[^.]+$
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
你需要在测试前清除浏览器缓存,因为错误的301(永久)重定向将被浏览器缓存。测试302(临时)重定向,以避免缓存问题。

现在,当您请求/valid-page/does-not-exist时,您将检查.../valid-page/does-not-exist.php是否作为文件存在,而不是以前的.../valid-page.php

请参阅我对ServerFault上的以下问题的回答,其中更详细地介绍了REQUEST_FILENAME实际设置为什么。https://serverfault.com/questions/989333/using - apache -重写规则——在htaccess - -删除- html -造成一个- 500错误

相关内容

  • 没有找到相关文章

最新更新