奇怪的URL重写规则.htaccess问题需要解释

时间:2013-12-18 11:07:11

标签: php apache .htaccess mod-rewrite url-rewriting

我有book.php?id=23这样的网址,并使用htaccess创建book/id/title 我试过这个

RewriteRule ^book/([0-9]+)/([^/]+)/?$ book.php?id=$1 [NC,L,QSA]

但它不起作用,它转发到books.php但没有$_REQUEST数据  事实证明这是因为url引用与我在呼叫社区帮助的php文件的名称相同,以解决这个问题

RewriteRule ^books/([0-9]+)/([^/]+)/?$ book.php?id=$1 [NC,L,QSA]

这是我目前的工作.htaccess:

RewriteEngine On
RewriteRule ^kitap/([0-9]+)/([^/]+)/?$ book.php?id=$1 [NC,L,QSA]
RewriteRule ^yyin/([0-9]+)/([^/]+)/?$ yayin.php?id=$1 [NC,L,QSA]
RewriteRule ^proje/([0-9]+)/([^/]+)/?$ project.php?id=$1 [NC,L,QSA]

PeteR

  

我见过的每个在线教程都使用了^ product和   product.php,或^ category和category.php所以我不知道为什么会这样   应该。也许其他人可以对此有所了解?

2 个答案:

答案 0 :(得分:1)

在我们对您原始问题的小讨论后,我开始讨论这个问题,我开始认为这取决于服务器配置以及它是否会运行无扩展脚本。

例如,我的开发服务器将运行无扩展脚本,即输入/ xyz将显示xyz.php

重写规则

RewriteRule ^category/([0-9]+)/([^/]+)/?$ category.php?id=$1 [NC,L,QSA]

不起作用,但是

RewriteRule ^categories/([0-9]+)/([^/]+)/?$ category.php?id=$1 [NC,L,QSA]

确实有效。

在我的托管服务器上,它不支持无扩展脚本,www.mydomain.com/xyz会给我404错误,但是:

RewriteRule ^category/([0-9]+)/([^/]+)/?$ category.php?id=$1 [NC,L,QSA]

按预期工作。

我只能假设当服务器支持无扩展脚本时,如果别名与脚本名称相同,则忽略重写规则。

答案 1 :(得分:0)

您很可能MultiViews与重写规则发生冲突。

富乐.htaccess:(进入DOCUMENT_ROOT目录)

Options +FollowSymLinks -MultiViews

RewriteEngine On

RewriteRule ^kitap/([0-9]+)/([^/]+)/?$ book.php?id=$1 [NC,L,QSA]
RewriteRule ^yyin/([0-9]+)/([^/]+)/?$ yayin.php?id=$1 [NC,L,QSA]
RewriteRule ^proje/([0-9]+)/([^/]+)/?$ project.php?id=$1 [NC,L,QSA]

RewriteRule ^books/([0-9]+)/([^/]+)/?$ book.php?id=$1 [NC,L,QSA]