【发布时间】:2021-11-22 16:35:51
【问题描述】:
如果页面不存在,我希望排除调用规则。在我现有的 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]
【问题讨论】:
标签: php regex apache .htaccess