htaccess, объединяющий правила для двух разных файлов - PullRequest
0 голосов
/ 22 сентября 2011

Вот противоречивые правила

Options +FollowSymLinks
RewriteEngine on

# For www.domain.com it should go to my-index.php page
#
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC]
RewriteRule ^(.*)$ my-index.php [NC,L]

# For Accessing Division Page http://user1.domain.com/news/news-details.php
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com [NC]
RewriteCond %{HTTP_HOST) !^www\.
RewriteRule ^news/news-details.php$  my-news.php?user=%1 [QSA,NC,L]

# For Page URL http://www.domain.com/news/news-details.php
#
RewriteCond %{REQUEST_URI} ^/news/news\-details\.php [NC]
RewriteCond %{HTTP_HOST} ^www\.domain\.com$  [NC]
RewriteRule ^(.*)$ my-news.php [NC,QSA,L]

# For Accessing Users Page
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$
RewriteRule ^$ /users.php?user=%1 [L]

Вызов страницы новостей и страницы указателя переходит на страницу указателя.я не знаю почему?

1 Ответ

2 голосов
/ 22 сентября 2011
  1. Порядок правил важен - сейчас оба упомянутых URL будут обслуживаться по первому правилу, которое переписывает их в my-index.php.

  2. Ваше первое правило (для my-index.php) слишком широкое - даже если вы разместите его в правильном порядке, оно все равно перепишет его на страницу my-index.php - каквы сопоставляете все, используя .* шаблон.

Учитывая вышеизложенное, попробуйте эти правила:

Options +FollowSymLinks
RewriteEngine On

# For Page URL http://www.domain.com/news/news-details.php
RewriteCond %{HTTP_HOST} ^www\.domain\.com$  [NC]
RewriteRule ^news/news-details\.php$ /my-news.php [NC,QSA,L]

# For Accessing Division Page http://user1.domain.com/news/news-details.php
RewriteCond %{HTTP_HOST} ^(.+)\.domain\.com [NC]
RewriteCond %{HTTP_HOST) !^www\.
RewriteRule ^news/news-details\.php$ /my-news.php?user=%1 [QSA,NC,L]

# For Accessing Users Page
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$
RewriteRule ^$ /users.php?user=%1 [L]

# For www.domain.com it should go to my-index.php page
# (but only if requested resource is not real file)
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /my-index.php [L]

Что я сделал:

  • переставлены правила: перемещено my-index.php на один шаг вниз;
  • добавлено условие, чтобы не переписывать запросы к существующим файлам (в противном случае my-news.php также будет перезаписано).

Эти правила могут все еще требовать доработки - я не знаю, какая у вас логика веб-сайта.

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