конфликт mod_rewrite - PullRequest
       10

конфликт mod_rewrite

0 голосов
/ 17 января 2012

Я пытаюсь дать каждому MOVIE свое собственное имя URL, например, www.helloworld.com/BATMAN. Я использовал mod_rewrite, чтобы создать такой URL. Я использовал следующий код htaccess для достижения такого результата.

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

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

mod_rewrite работает отлично. Когда пользователь вводит название фильма RANDAM (имя, которое не существует в базе данных), например, www.helloworld.com/abcd, я создал перенаправление URL-адреса www.helloworld.com/oopsmovienotfound.php. Это тоже отлично работает. Но проблема, с которой я сталкиваюсь, заключается в следующем: когда пользователь нажимает www.helloworld.com/login.php. URL-адрес продолжает циклически изменяться между login.php и oopsmovienotfound.php ИЛИ URL-адрес перенаправляется на www.helloworld.com/oopsmovienotfound.php beacause база данных не имеет "login.php" в качестве названия фильма. Я думал, что эта команда

 RewriteCond %{REQUEST_FILENAME} !-f 

должен был позаботиться об этом, но это не так. Пожалуйста помоги. Ниже приведен журнал перезаписи.

[18/Jan/2012:15:51:41 -0500] "GET /movie/batman HTTP/1.1" 200 102262
[18/Jan/2012:15:51:42 -0500] "GET /movie/text.css HTTP/1.1" 304 -
[18/Jan/2012:15:51:42 -0500] "GET /movie/selectMovie.js HTTP/1.1" 304 -
[18/Jan/2012:15:51:42 -0500] "GET /movie/selectMoiveName.js HTTP/1.1" 304 -
[18/Jan/2012:15:51:42 -0500] "GET /movie/finalselection.js HTTP/1.1" 304 -
[18/Jan/2012:15:51:42 -0500] "GET /movie/categories.png HTTP/1.1" 304 -
[18/Jan/2012:15:51:42 -0500] "GET /movie/background.png HTTP/1.1" 304 -
[18/Jan/2012:15:51:42 -0500] "GET /movie/tinylogo2.png HTTP/1.1" 304 -
[18/Jan/2012:15:51:42 -0500] "GET /movie/header.png HTTP/1.1" 304 -
[18/Jan/2012:15:51:42 -0500] "GET /movie/selectState.js HTTP/1.1" 304 -
[18/Jan/2012:15:51:42 -0500] "GET /movie/content_tail.jpg HTTP/1.1" 304 -
[18/Jan/2012:15:51:42 -0500] "GET /movie/movieimages/movieimage.jpg HTTP/1.1" 304 -
[18/Jan/2012:15:51:42 -0500] "GET /movie/tab.png HTTP/1.1" 304 -
[18/Jan/2012:15:52:24 -0500] "GET /movie/login.php HTTP/1.1" 200 3330
[18/Jan/2012:15:52:24 -0500] "GET /movie/login.php HTTP/1.1" 200 3330
[18/Jan/2012:15:52:24 -0500] "GET /movie/img/bg.jpg HTTP/1.1" 302 102262
[18/Jan/2012:15:52:29 -0500] "GET /movie/img/oops.php HTTP/1.1" 302 102262
[18/Jan/2012:15:52:29 -0500] "GET /movie/img/oops.php HTTP/1.1" 302 102262
[18/Jan/2012:15:52:33 -0500] "GET /movie/img/oops.php HTTP/1.1" 302 102262

При вводе URL-адреса localhost/movie/index.php URL-адрес перенаправляется на localhost/movie/batman, поскольку batman был фильмом, который я просматривал до закрытия предыдущего сеанса. Но когда я ввожу localhost/movie/login.php, URL продолжает зацикливаться. Забавно, что на сервере нет такой папки под названием «img». почему он продолжает циклически проходить через localhost/movie/img/oops.php, когда такого пути нет?

1 Ответ

2 голосов
/ 18 января 2012

Сначала попробуйте сделать обратное, например, если это файл, немедленно остановитесь, например:

RewriteEngine ON
RewriteCond %(REQUEST_FILENAME) -d [OR]
RewriteCond %(REQUEST_FILENAME) -f [OR]
RewriteCond %(REQUEST_FILENAME) -l
RewriteRule (.*) - [QSA,L]

# all the other cases, apply rewrite:
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

И если этого недостаточно:

Два совета:

Если вы находитесь не в размещенной среде (= если это ваш собственный сервер, и вы можете изменять виртуальные хосты, а не только файлы .htaccess), попробуйте использовать директиву RewriteLog: она помогает вам отслеживать такиепроблемы:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

Мой любимый инструмент для проверки регулярных выражений:

http://www.quanetic.com/Regex (не забудьте выбрать ereg (POSIX) вместо preg (PCRE))!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...