2012-01-06 4 views
1

Я работаю над приложением MVC PHP.htaccess и перенаправление URL

Мой .htaccess:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 

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

Мой index.php:

<?php 

$url = $_REQUEST['url']; 

echo $url; 

Так что, когда я пишу в URL-адрес что-то вроде (mysite.com/mvc/help), PHP принтами (помощь) на главной странице. Он работает очень хорошо для всего, что я пишу в URL-адресе (mysite.com/mvc/index/log) возвращается (индекс/журнал), но если я пишу (mysite.com/mvc/index), то у меня нет ошибок, но ничего не отображается и $ url не задан!

Надеюсь, я объясню это правильно. Cheers

Редактировать: Я допустил ошибку, (mysite.com/mvc/index/log) ничего не возвращает. Кажется, что если первое слово «index», это не работает, если URL-адрес похож на (mysite.com/mvc/log/index), он работает и возвращает (log/index).

Также я добавил строку в index.php (print_r ($ _ GET);), которая возвращает пустой массив, когда URL-адрес подобен (mysite.com/mvc/index/log или mysite.com/mvc/index), если это может помочь ...

После небольшого расследования я думаю, что проблема заключается в том, что слово «индекс» автоматически заполняется «.html» или «.php», и я не знаю как избавиться от этого ...


Решение: Вот мой Htaccess рабочий:

Options -Indexes +FollowSymLinks -Multiviews 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 

RewriteRule ^(.*)$ /mvc/index.php?url=$1 [L] 
+0

Может ли это быть третьим RewriteCond? Я всегда использую! -d и! -f, но никогда не видел! -l раньше. Что это? –

+0

! -d - это «не папка»,! -f «не файл» и! -l - это «не ссылка». Я пробовал без него, но у меня такая же проблема. – M4MM0N

ответ

1

OK Я узнал, как заставить его работать, похоже, мне нужна эта строка:

Options -Indexes +FollowSymLinks -Multiviews 
0

Попробуйте изменить его к этому:

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

и изменить ваш $_REQUEST$_GET к:

$url = $_GET['url']; 
+0

Я пробовал это с этими изменениями, но все тот же, я не могу понять, почему он работает с «indexe» или «inde», но не с «index». – M4MM0N

+0

Это потому, что ваш второй RewriteCond находит, что 'index' - это файл, который существует. Я бы сохранил первый RewriteCond и избавился от двух других. – Grexis

+0

Я попытался избавиться от двух других условий, и я понятия не имею, почему, но потом у меня ошибка «500 Internal Server». – M4MM0N

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