首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mod_rewrite冲突

mod_rewrite冲突
EN

Stack Overflow用户
提问于 2012-01-18 02:34:38
回答 1查看 355关注 0票数 0

我试着给那里的每部电影起一个url名称,例如www.helloworld.com/BATMAN。我一直在使用mod_rewrite来创建这样的url。我一直在使用下面的htaccess代码来实现这样的结果。

代码语言:javascript
复制
 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/oopmovienotfin.php。这也很好用。但我遇到的问题是:当用户点击www.helloworld.com/login.php时,.The url在login.php和oopsmovienotfound.php之间不断循环,或者url被转发到www.helloworld.com/oopmovienotfin.php,因为数据库中没有"login.php“作为电影名称。我以为这个命令

代码语言:javascript
复制
 RewriteCond %{REQUEST_FILENAME} !-f 

我应该处理好这件事,但它没有。请帮帮忙。以下是重写日志。

代码语言:javascript
复制
[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中循环?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-18 04:58:40

首先试着做相反的事情,例如,如果它是一个文件,立即停止,如下所示:

代码语言:javascript
复制
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指令:它可以帮助您跟踪以下问题:

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

我最喜欢用来检查regexp的工具:

http://www.quanetic.com/Regex (别忘了选择ereg(POSIX)而不是preg(PCRE)!)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8899813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档