.htaccess 从url路径中删除子文件夹,前提是结尾处没有斜杠

vyu0f0g1  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(154)

我有htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /pages/$1 [L]

它将/pages/从URL中删除到页面
但当我打开链接时,结尾处没有斜杠:

site.com/contacts

它被重定向到

site.com/pages/contacts/

有办法解决这个问题吗?

  • 我尝试过不同的结果,大多数情况下,其他选项会导致重定向到site.com/index.php(site.com/pages/index.php)*
sirbozc5

sirbozc51#

发生这种情况是因为pages/contacts是一个目录,而Apache mod_dir模块在对目录的请求后添加了一个尾随斜杠。
您可以检查目录是否存在,并在重写为pages/之前通过规则添加尾随/

RewriteEngine On

# add a trailing slash if pages/$1 is a directory
RewriteCond %{DOCUMENT_ROOT}/pages/$1 -d
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,R=301,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /pages/$1 [L]

请确保使用其他浏览器或从浏览器中删除缓存数据以测试此规则,从而避免使用旧缓存。

相关问题