2013-11-01 3 views
1

Я потратил немного времени, пытаясь различные методы для добавления слешей к моим URL, например, этот:Добавить косую черту в URL-адресов - разработка и производство Те же правила

Add Trailing Slash to URLs

На моем производстве сайт, это нормально работает с этим правилом:

RewriteEngine ON 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*[^/])$ /$1$2/ [R=301,L] 

Но он не работает над моей локальной установкой развития. Я запускаю локальные сайты по адресу localhost:9090, поэтому, когда я перехожу к URL-адресу, например localhost:9090/users/new/, я получаю 500 внутренних ошибок сервера.

Я пробовал аналогичное правило, используя %{HTTP_POST}, и это тоже не работает. Я чувствую, что мне что-то не хватает, и поиск в Интернете продолжает указывать мне на правила, которые я уже пробовал.

Каков наилучший способ иметь правило, которое работает как для разработки, так и для производства?

ПРИМЕЧАНИЕ

После некоторого большого совета от @anubhava я реорганизовал свои правила и нашел некоторые лучшие правила для существующих потребностей. Я закончил с новым правилом расширения PHP и его рекомендацией, и теперь он работает как на localhost, так и на производстве.

+0

Уверены, что у вас включен mod_rewrite? Каковы ваши журналы ошибок? –

+0

У меня есть mod_rewrite, так как в игре есть несколько других правил, например удаление PHP-расширений и т. Д. – nicorellius

ответ

1

В вашем регулярном выражении нет $2.

Вы можете попробовать этот код:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+?[^/])$ /$1/ [R=302,L] 

# hiding .php 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.+?)/?$ /$1.php [L] 

Попробуйте в новом окне браузера, чтобы избежать проблем кэширования 301.

+0

Я попытался '/ $ 1 /' и '/ $ 1 $ 2 /' в попытке охватить несколько уровней каталоги. Оба не работают в новом браузере. Должны ли '/ $ 1 /' покрывать URL-адреса, например 'example.com/test/dir/path /'? – nicorellius

+0

Запустите это в Firebug и посмотрите, что вы получаете на вкладке NEt – anubhava

+0

Запустите в Chrome, под Firebug> Сеть: метод GET, 500 внутренних ошибок сервера, введите: text/html – nicorellius