htaccess - 强制尾随斜杠两个目录深

时间:2010-08-14 18:35:48

标签: .htaccess mod-rewrite seo

我的网站结构有一个根/index.php,一些文件为/directory/index.php,一些文件为/ directory /(filename).php

我有以下.htaccess删除了我的网址的php扩展和“index.php”,并强制在第一级目录上使用斜杠来获取SEO优点:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
RewriteRule (.*)\.php$ /$1/ [L,R=301]

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

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule .*[^/]$ $0/ [L,R=301]

所以以下工作正常(它们显示正确的页面):

/
/directory/
/directory/filename/

唯一不起作用的是,如果我输入:

/directory/filename

它转到:

http://(mylocalurl)/Users/(myusername)/Sites/(mysitedirectory)/directory/filename/

我的问题是:如何重写二级文件名以强制使用如下的斜杠:

/directory/filename/

感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

DirectorySlash on

将在适当的位置添加尾部斜杠。

答案 1 :(得分:0)

不是100%肯定,但它可能是由你的第二个RewriteCond触发,RewriteRule运行,没有替换任何东西,然后你有[L]使它不能去最后一个RewriteCond。

也许改变两者的顺序可能会有所帮助?

(或者,你可能想要查看Multiviews指令)

答案 2 :(得分:0)

当您指定执行外部重定向的本地相对URL路径时,该路径需要以斜杠为前缀。由于与RewriteRule测试模式的匹配没有前导斜杠,请务必在重写中添加一个:

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule .*[^/]$ /$0/ [L,R=301]

如果我理解你的问题,这是你唯一的问题。如果您还需要其他东西,请告诉我。