2010-06-24 7 views
1

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

Options +FollowSymLinks 
RewriteEngine On 

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

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

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

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

ответ

3

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

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
+0

Это именно то, что мне нужно. Отлично! Огромное спасибо. Тем не менее, я немного запутался в следующей проблеме, хотя это на самом деле не влияет на меня. URL-адрес url localhost/dollars/index перенаправляется на index.php, не передавая «index» в качестве параметра $ 1. Почему это? Еще раз спасибо! – apeace

1

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

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

RewriteEngine On 

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

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

+0

Большое вам спасибо! Я вижу, что я делаю неправильно. Хотя, я предпочитаю решение Amber, потому что оно немного чище. Кроме того, вопрос, который я задал Amber, также относится к этому решению по причинам, которые я не понимаю. Мысли? – apeace

+0

У вас должен быть включен MultiViews для этого каталога. Попробуйте добавить 'Options -MutliViews' к этому файлу' .htaccess' и посмотреть, правильно ли он ведет себя. –

+0

Полностью правый чувак. Когда-нибудь я прочитаю книгу об этом ... Еще раз спасибо! – apeace

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