Переписать, чтобы добавить косую черту, но независимо от домена? - PullRequest
4 голосов
/ 16 августа 2011

Я использую Apache и mod_rewrite для перезаписи URL для моего веб-приложения.Вы можете увидеть это здесь:

RewriteEngine On
RewriteBase / 

# www. to non-www.
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

# Redirect non-existant files so there's a trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [R=301,L]

# Send the URL to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L,QSA]

Все работает нормально, но проблема заключается в перезаписи косой черты.Это работает, когда я в корне домена, но в моей промежуточной среде я запускаю это приложение в подкаталоге.Мне нужно изменить директиву RewriteBase, чтобы включить подкаталог, иначе перезапись не удалась.

Я ищу решение, которое добавит косую черту в URL - независимо от того, работает ли приложение накорень сервера, без необходимости изменять RewriteBase.Заранее спасибо.

1 Ответ

5 голосов
/ 17 августа 2011

После осмотра и некоторой помощи @ MortBM , похоже, что ниже работает хорошо:

RewriteEngine On

# www. to non-www.
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

# Add a trailing slash to any non-existent files
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ %{REQUEST_URI}/ [R=301,L]

# Send the URI to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [QSA,L]

Резюме: удаление RewriteBase и использование %{REQUEST_URI} в перенаправлении сделали это:)

...