2009-12-15 3 views
3

Мой разработчик предоставил мне некоторые правила перезаписи Apache, необходимые для работы нашего приложения. Когда я добавил их в Apache, мои страницы www.domain.com/blog и www.domain.com/phpmyadmin больше не работали. Я попытался добавить первое правило RewriteCond для своего блога, а также последнее правило phpmyadmin, но никто не работает должным образом. По сути, я хочу, чтобы любые запросы/blog или/phpmyadmin НЕ переписывались и переходили в мой корневой каталог документов и запускали эти приложения за пределами перезаписи. Можете ли вы помочь мне найти решение? СпасибоНужна помощь с проблемами с Apache Rewrite

RewriteCond %{REQUEST_URI} !^/blog/ 
RewriteRule ^/(.*_css.*\.css.*) /$1 [QSA,L] 
RewriteRule ^/(.*_js.*\.js.*) /$1 [QSA,L] 
RewriteRule ^/(.*_swf.*\.swf.*) /$1 [QSA,L] 
RewriteRule ^/(.*_img.*\.[jpg|JPG|jpeg|JPEG|gif|GIF|bmp|BMP|png|PNG].*) /$1 [QSA,L] 
RewriteRule ^/(.*)$ /index.php?url=$1 [QSA,L] 
RewriteRule ^/phpmyadmin(.*)$ /phpmyadmin$1 [QSA,L] 
</VirtualHost> 

Они расположены по адресу www.domain.com/blog и www.domain.com/phpmyadmin.

Apache 2.2.13

Спасибо!

ответ

2

Если вы хотите, чтобы избежать перезаписи URL-адресов, которые начинаются с /blog/ или /phpmyadmin/ то может быть в состоянии уйти с первого правила является:

RewriteRule ^/(?:blog|phpmyadmin)/ - [L] 

(замена RewriteCond и затем удаляя старое правило PhpMyAdmin).

Быстрое объяснение: это соответствует любым URL-адреса, начинающиеся с /blog/ или /phpmyadmin/ и не переписывание их (- для замены), а затем останавливает любое дальнейшее переписывания ([L]).


Предыдущий ответ:

Ваши правила перезаписи противоречивы, для начала. Кроме того, на данный момент RewriteCond применяется только к первому правилу. Кроме того, последнее правило игнорируется из-за правила, прежде чем оно будет соответствовать всем. Вы можете что-то вроде этого:

RewriteRule ^/blog/(.*)$ /index.php?url=$1 [QSA,L] 

, как я предполагаю, что вы просто пытаетесь переписать все URL-адреса из /blog/foo/bar в /index.php?url=foo%2fbar? Если нет, объясните, что вы пытаетесь выполнить, и я отредактирую свой ответ.

+0

Спасибо, Дейв, первые и последние правила перезаписи - это те, которые я работаю над изменением, другие используются нашим приложением.У меня есть блог и phpmyadmin dir прямо с корневого документа. Я не хочу, чтобы они были переписаны где угодно. Когда кто-то попадает на www.domain.com/blog или phpmyadmin, я хочу, чтобы эти приложения работали нормально и не перезаписывались. В настоящее время они подпадают под один из правил перезаписи и не работают. Спасибо – roacha

+0

Dave I обновил свой первоначальный вопрос более подробно, я надеюсь, что это объясняет то, что я пытаюсь выполнить. Благодаря! – roacha

+0

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

0

Err ... не уверен, что вы пытаетесь сделать. Вы пытаетесь «Исключить» статические файлы в виде изображений/таблиц стилей/флеш-роликов/файлов javascript и ссылки на PHPMyAdmin? Может быть, что-то подобное может сделать работу для вас «быстрый„N dirrrrty“

# Enable the RewriteEngine 
RewriteEngine On 
RewriteBase /

# Check if the file, directory or symlink does not already exists. 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-F 
RewriteCond %{REQUEST_FILENAME} !favicon\.ico 
RewriteCond %{REQUEST_FILENAME} !robots\.txt 

# Rewrite all other requests to the index.php 
RewriteRule ^(.+)$ /index.php?url=$1  [QSA,L] 
+0

Спасибо за обратную связь Чарльза, после сдачи этих правил на месте мой перезапуск Apache не смог с этим сообщением: Синтаксическая ошибка в строке 46 /usr/local/apache2/conf/extra/httpd-vhosts.conf: RewriteBase: только в файлах конфигурации для каждого каталога Затем я удалил строку RewriteBase и Apache, но мое приложение больше не работало, как ожидалось. – roacha

+0

Он предположил, что строка будет находиться в файле .htaccess. Вы можете попробовать удалить строку «RewriteBase». Что вы пытаетесь сделать? – DMI

+0

Спасибо, Дэйв, я удалил строку RewriteBase и Apache, но мое приложение больше не работало должным образом. Все, что я пытаюсь сделать, это добавить правило, которое не будет перенаправлять мой блог или URL-адрес phpmyadmin. www.domain.com/blog и www.domain.com/phpmyadmin. У меня есть оба этих каталога прямо с моего корня документа. – roacha

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