Правило перезаписи .htaccess, предотвращающее бесконечный цикл - PullRequest
1 голос
/ 25 июня 2010

У меня есть каталог с именем долларов , который содержит файл index.php . Я хотел бы, чтобы URL http://localhost/dollars/foo был переведен в долл. / Index.php? Долл. = Foo . Это файл .htaccess, который у меня сейчас есть в директории доллары :

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !^index\.php
RewriteRule ^(.+)$ index.php?dollars=$1 [L]

Идея состоит в том, что любой запрос, отличный от index.php , должен использовать RewriteRule.

Однако это не работает.

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

Ответы [ 2 ]

3 голосов
/ 25 июня 2010

Часто используемое решение для перезаписи - просто проверить, что запрашиваемый путь не указывает на фактический файл / каталог, и переписать его, если это не так - поскольку переписанный URL-адрес будет указывать на фактический файл , цикл не возникает.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
1 голос
/ 25 июня 2010

Ответ Амбер должен помочь вам, но я хотел бы остановиться на том, что пошло не так в вашем конкретном случае.У вас была правильная идея, но %{REQUEST_FILENAME} фактически заканчивается здесь как полностью определенный путь, поэтому ваше регулярное выражение должно проверять index.php в конце, а не в начале.

Следовательно, вы должны найти этоэто будет работать больше, чем вы ожидаете:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !index\.php$
RewriteRule ^(.+)$ index.php?dollars=$1

Замена RewriteCond s на те, о которых упоминала Эмбер, будет менее проблематичной, если вы добавите другие вещи в этот каталог, поэтому я рекомендую использоватьв любом случае, вместо этого.

...