RewriteRule为同名

时间:2011-11-17 12:14:46

标签: php mod-rewrite rewrite

我有一个名为

的文件

details.php

我尝试将htaccess放入以下行

RewriteRule ^details/(.+)/(.+)$ /details.php?id=$1&name=$2 [NC]

并且它不能与当前定位的相同名称一起使用

更新1:

通过添加-MultiViews

解决了问题

选项+ FollowSymLinks -MultiViews

3 个答案:

答案 0 :(得分:0)

删除“* ”。 “”是一个特殊字符,意思是“前一个字符的零个或多个”。他们正则表达式中有两个连续的地方是非常不规则的,如果不是不正确的话。如果你确实有一个名为details.php的文件,你也不需要它们。

答案 1 :(得分:0)

你应该尝试:

RewriteRule ^details/([0-9]+)/(\w+)/?$ /details.php?id=$1&name=$2 [NC,L]

其中:

id =仅将ID限制为数字
名称 =仅将名称限制为字词+ nums

答案 2 :(得分:0)

最近,我遇到了一个问题,我需要重写网址,但无法弄清楚为什么会失败。然后我偶然发现了这个帖子,它解决了我的问题。

问题是,我的托管服务提供商默认启用Multiviews。 This Page详细解释了为什么这根本不能与RewriteRules很好地融合。我添加了-Multiviews来解决我的问题:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /devpath/SampleCustomerName/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]

如果我想在about.php驻留在该文件夹中时导航到/ devpath / SampleCustomerName / about,我会收到404错误。

使用+多视图

  

“它可以根据浏览器提供的媒体类型,语言,字符集和编码首选项,选择资源的最佳表示形式。它还实现了一些功能,可以更智能地处理来自发送不完整协商信息的浏览器的请求。“   “重点是Multiviews指令与我们的重写规则相互关联。因此,让我们的重写规则正常工作的解决方案是在没有Mutliviews选项的情况下向相关主机添加自定义指令。”