2013-07-21 3 views
1

У меня есть правило перезаписи в моем .htaccess.Apache, .htaccess - не работает локально

RewriteRule ^(.+?)$ /user_home.php?domain=$1 [L,QSA] 

Какие перенаправляет mysite.com/mypage к mysite.com/user_home.php?domain=mypage

Это прекрасно работает на моем виртуальном хостинге, но при работе на местном уровне, мой сайт находится в www/mysite/ и вместо того, чтобы перенаправлять на www/mysite/user_home.php?domain=mypage он пытается перенаправить www/user_home.php?domain=mypage, который Безразлично» t существует.

я получаю следующее сообщение об ошибке в моей Apache Logs

[error] [client ::1] script 'C:/wamp/www/user_home.php' not found or unable to stat 

Как я могу изменить мой .htaccess, чтобы сделать его непосредственно в файл в текущем каталоге, используя относительный путь вместо абсолютного пути ..

+0

'/mysite/user_home.php домен = $ 1' ... – Ohgodwhy

+0

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

+3

Я очень сомневаюсь, что вы найдете решение «поймать все», потому что структура каталогов изменяется между средами. Просто не нажимайте файлы .htaccess между локальным и производственным. – Ohgodwhy

ответ

1

Вам просто нужно удалить ведущий слэш из целевого URL в правиле, как это:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+?)/?$ user_home.php?domain=$1 [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f также необходим для предотвращения зацикливания.

0

Попробуйте этот код:

RewriteBase /mysite/ 
RewriteRule ^(.+?)$ /user_home.php?domain=$1 [L,QSA] 

Вы просто должны добавить RewriteBase с пути в корневой папке вашего сайта.

0

Лучшее решение было бы добавить проверку, если есть файл с именем, как это и установить RewriteBase:

RewriteEngine On 
RewriteBase mysite/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^(.+?)$ /user_home.php?domain=$1 [QSA,L]