Проблемы с mod_rewrite в Apache (с WAMP) - PullRequest
0 голосов
/ 16 августа 2011

Идея: я хочу сделать так, чтобы все, что идет после имени домена и заканчивается на .html, обрабатывалось как index.php

Пример: www.test.ro/1/2/3.html на самом деле должно быть www.test.ro/index.php?var=1/2/3.html.

www.test.ro настроен как виртуальный хост для разработки, и AllowOverride имеет значение All.

Файл .htaccess, похоже, обрабатывается, но не все время.Если я напишу нераспознанное правило, такое как BizzareRule, сервер будет работать без возврата ошибки кода 500.Если я поставлю правильные правила между <IfModule mod_rewrite.c></IfModule>, я получу ошибку 500, даже если у меня есть другие vhosts, использующие те же условия и работающие идеально.

Вот содержимое моего vhost:

<VirtualHost *:80>
    ServerAdmin eu@localhost.com
    ServerName  www.test.ro
    ServerAlias test.ro

    DocumentRoot D:/Projects/grabsite/test.ro
    Options Indexes FollowSymLinks MultiViews

    DirectoryIndex index.php index.html

    LogLevel warn
    ErrorLog D:/Projects/grabsite/test.ro/error.log
    CustomLog D:/Projects/grabsite/test.ro/access.log combined

    <Directory "D:/Projects/grabsite/test.ro">
        Options -Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

И тестовое содержимое для .htaccess:

RewriteEngine On
RewriteRule ^/?([^/]*)\.html$ /index.php?seo=$1 [L]

Ответы [ 2 ]

1 голос
/ 16 августа 2011

Кажется, что вы вступаете в бесконечный цикл.Сначала попробуйте упростить правило: RewriteRule ^(.*)\.html$ /index.php?seo=$1 [L]

Или просто RewriteRule ^index.html$ /index.php?seo=$1 [L]

Далее, лучше иметь RewriteCond -f и RewriteCond -d, чтобы не выполнять правило, если вызапрос существующего файла / папки.В некоторых ситуациях это может предотвратить бесконечный цикл в правиле

0 голосов
/ 17 августа 2011

Проблема в регулярных выражениях.Вы сказали: «Файл .htaccess, кажется, обрабатывается, но не все время» .

Если вы проверите свой шаблон ^/?([^/]*)\.html$, вы увидите, что это будет работать для файлов в корневой папке ТОЛЬКО (например, /index.html).

Решение: измените шаблон на ^(.+)\.html$ и все будет хорошо - теперь он будет соответствовать ЛЮБОЙ URL-адрес, заканчивающийся .html (например, /index.html, а также /hello/pink-kitten.html и т. Д.).

...