从url路径中删除子文件夹,假设末尾没有斜杠



我有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)

这是因为pages/contacts是一个目录,Apachemod_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]

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

相关内容

最新更新