htaccess - принудительно завершает косую черту в двух каталогах - PullRequest
1 голос
/ 14 августа 2010

В структуре моего сайта есть корень /index.php, некоторые файлы - /directory/index.php, а некоторые - /directory/(filename).php

.

У меня есть следующий .htaccess, который удаляет расширения php и «index.php» для моих URL-адресов и заставляет завершающие косые черты в каталогах первого уровня для совершенства 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 ]

4 голосов
/ 15 августа 2010
DirectorySlash on

добавит косую черту в случае необходимости.

0 голосов
/ 14 августа 2010

Когда вы указываете локальный относительный URL-путь для выполнения внешнего перенаправления, этот путь должен начинаться с косой черты.Поскольку совпадение с вашим RewriteRule тестовым шаблоном не будет иметь начального слеша, обязательно добавьте его в перезапись:

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

Если я правильно понял вашу проблему, это единственная проблема, которая у вас,Если вам нужно что-то еще, дайте мне знать.

0 голосов
/ 14 августа 2010

Не уверен на 100%, но может случиться так, что он запускается вашим вторым RewriteCond, RewriteRule запускается, ничего не заменяя, и тогда у вас есть [L], который не позволяет перейти к последнему RewriteCond.

Может быть, изменение порядка двух может помочь?

(В противном случае вы можете обратиться к директиве Multiviews)

...