2014-10-16 2 views
0

Я пытаюсь показать http://www.domain.com/thread-category/subdomain/, когда пользователь просит http://subdomain.domain.com без изменения URL-адреса в адресной строке.htaccess map url to new url and throw 404

Однако я не хочу дублировать содержимое, поэтому, когда запросы пользователя/google бота http://www.domain.com/thread-category/subdomain/ Я хочу выбросить ошибку 404-not found.

Это мой код, который вызывает бесконечный цикл перенаправления

RewriteEngine On 
RewriteBase/

# Hide url 
RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC] 
RewriteCond %{REQUEST_URI} /thread-category/([^\?\ ]*)/ 
RewriteRule . - [R=404,NC,L] 


# Show /thread-category/subdomain/ for 'subdomain.domain.com' 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
RewriteCond %{HTTP_HOST} !^(www)\.domain\.com$ [NC] 
RewriteRule ^(.*)$ http://www.domain.com/thread-category/%1/$1 [P] 

В основном я перенаправлять А к ​​В и В к А и так далее .. В основном я нужен способ, чтобы обнаружить, если этот адрес является осуществляется доступ к HTAccess или запрашивается кем-то другим ... Я пытался что-то вроде:

RewriteCond %{ENV:REDIRECT_STATUS} !^(.*)$ 

, но это не сработало.

Я искал, но не смог найти способ его исправить. Каков наилучший способ остановить этот бесконечный цикл перенаправления?

Большое спасибо!

ответ

0

В первом правиле вам необходимо использовать переменную THE_REQUEST вместо REQUEST_URI. THE_REQUEST переменная представляет собой исходный запрос, полученный Apache из вашего браузера, и он не перезаписывается после выполнения некоторых правил перезаписи. Пример значения этой переменной: GET /index.php?id=123 HTTP/1.1.

RewriteEngine On 
RewriteBase/

# Hide url 
RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC] 
RewriteCond %{THE_REQUEST} /thread-category/([^\?\ ]*)/ 
RewriteRule . - [R=404,L] 

# Show /thread-category/subdomain/ for 'subdomain.domain.com' 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
RewriteCond %{HTTP_HOST} !^(www)\.domain\.com$ [NC] 
RewriteRule ^(.*)$ http://www.domain.com/thread-category/%1/$1 [P,L] 
+0

Я также пытался что-то подобное, но это не работает ... При попытке получить доступ с помощью subdomain.domain.com я получаю «Запрошенный URL/токарно-категория/наука/не найдена на этом сервере «. - 404 Не Найдено. Я не знаю, что может быть причиной этой ошибки ... Спасибо за ваш ответ! – Ramiro

+0

Первое правило 404 повлияет только на 'www.domain.com' из-за этого условия' RewriteCond% {HTTP_HOST}^www \ .domain \ .com [NC] '. Какой URL-адрес вы указали в своем браузере и есть ли еще больше правил в вашем .htaccess? – anubhava

+0

Я прокомментировал все остальные правила, чтобы убедиться, что они не мешают им. Доступ к обоим URL (subdomain.domain.com) и (www.domain.com/thread-category/subdomain/) Я получаю ошибку 404 Not Found. Это даже худшее, что я нахожусь в общей среде, и я не могу получить доступ к файлам журналов, чтобы узнать, что происходит ... Кроме того, он говорит: «Ошибка внутреннего внутреннего сервера 500 была обнаружена при попытке использовать ErrorDocument для обработки запроса ». – Ramiro

Смежные вопросы