проблема правил переписывания apache для определенных страниц - PullRequest
14 голосов
/ 24 ноября 2011

У меня проблема с перенаправлениями .htaccess.Когда я набираю:

http://www.domain.com/contact

, он идет к index.php, а не к contact.php

, вот мой .htaccess:

Redirect 301 /clients http://clients.domain.com

RewriteEngine On
SetEnvIf Host ^www\. page=www
SetEnvIf Host ^mob\. page=mobile

RewriteBase /
SetEnvIfNoCase User-Agent "^Wget" bad_bo
#etc ... 
Deny from env=bad_bot

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

RewriteRule ^about/?$ about.php 
RewriteRule ^contact/?$ contact.php 

rewriterule ^(.*)$ index.php?subdomain=%{ENV:page}&page=$1 

в моем php iполучить:

<?php

print_r($_GET);
Array (
  [subdomain] => www
  [page] => contact.php
) 

Чего мне не хватает?

Ответы [ 2 ]

17 голосов
/ 24 ноября 2011

Попробуйте это правило:

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

RewriteRule ^about/?$ about.php [NC,QSA,L]
RewriteRule ^contact/?$ contact.php [NC,QSA,L]

rewriterule ^([a-z0-9]+)$ index.php?subdomain=%{ENV:page}&page=$1 [NC,QSA,L]

Я также добавил флаги NC, QSA, L, чтобы убедиться, что последнее правило [L] выполняется в случае совпадения, [NC] для не регистров и [QSA] для строки запроса: Добавить.

0 голосов
/ 24 ноября 2011

Вам необходимо переписать свои правила о и контактах следующим образом:

RewriteRule ^about/?$ about.php [L,QSA]
RewriteRule ^contact/?$ contact.php [L,QSA]
...