Невозможно переписать "http://www" в" http://" в .htaccess - PullRequest
1 голос
/ 29 октября 2011

У меня есть веб-сайт, и я пытаюсь переписать все URL с 'http://www. ..' на 'http: //...'

Это содержимое моего .htaccess

<IfModule mod_rewrite.c>
   Options +FollowSymlinks
    Options -Multiviews
    RewriteEngine on
    RewriteBase /

    RewriteCond %{HTTP_HOST} ^www.example.com$
    RewriteRule ^(.*) http://example.com/$1 [QSA,R=301]

    #RewriteBase /employers/
    RewriteRule ^([a-zA-Z0-9]+)/?$ employers/page.php?page=$1 [L]

    #RewriteBase /candidates/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/]+)/(\d{4})/(0?[1-9]|1[0-2])/([^/]+)/?$ candidates/read.php?page=$1&year=$2&month=$3&slug=$4 [L]
</IfModule>

Это корректно переписывает эти типы URL: www.example.com, www.example.com/index.php

Проблема в том, что он не переписывает эти типы: www.example.com/андидаты /, www.example.com/candidates/login.php

Как это исправить, спасибо!

РЕДАКТИРОВАТЬ

У меня есть.htaccess в папке моих кандидатов, и это содержание:

<IfModule mod_rewrite.c>
    RewriteRule ^([^/]+)/(\d{4})/(0?[1-9]|1[0-2])/([^/]+)/?$ read.php?page=$1&year=$2&month=$3&slug=$4 [L]
</IfModule> 

Теперь, если я прокомментирую его, правило перезаписи правильно переписывается в 'http://'.

Мой вопрос: 1. Как работает.htaccess влияет на переписывание http://'?2. Как я могу это исправить

Спасибо

Ответы [ 3 ]

1 голос
/ 29 октября 2011

Я на самом деле проверил ваш код выше, и он действительно работает для меня!

Что я понял, так это то, что мой браузер имел тенденцию кешировать настройки .htaccess, а не обновлять, даже если я что-то изменил, поэтому я рекомендую сделать полную очистку кеша браузера и посмотреть, что произойдет потом. Я уверен, что это помогает.

Что вы также можете перепроверить, так это то, что в папках «кандидатуры» и «работодатели» нет локальных файлов .htaccess.

1 голос
/ 29 октября 2011

Я думаю, вам нужно добавить L (Last) к вашему первому правилу перезаписи.Как

RewriteRule ^(.*) http://example.com/$1 [QSA,R=301,L]

(что будет означать, что после переписывания домена Apache прекратит обработку остальных правил и просто вернет ответ 301)

0 голосов
/ 29 октября 2011

Что если вы поместите две строки:

RewriteCond %{HTTP_HOST} ^www.example.com$`
RewriteRule ^(.*) http://example.com/$1 [QSA,R=301]

... в конце? Такое изменение часто решало проблемы для меня. (Я полагаю, что «RewriteCond» может что-то испортить, если это относится к вещам, находящимся под ним, что не должно ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...