我的网站结构有一个根/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/
感谢您的帮助!
答案 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]
如果我理解你的问题,这是你唯一的问题。如果您还需要其他东西,请告诉我。