.htaccess:重写规则中的斜杠(/)是如何处理的?

.htaccess:重写规则中的斜杠(/)是如何处理的?,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,这是我的全部.htaccess: RewriteEngine On RewriteBase /~user/sitetest/ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+?)/?$ view.php?id=$1 当我访问时,它加载$_GET[“id”]值,一切正常。太棒了 但我希望它在(注意“view/”)下工作 因此,我尝试将重写规则替换为: RewriteRule ^view/(.+?)/?$ view.php?id=$1 但

这是我的全部.htaccess:

RewriteEngine On
RewriteBase /~user/sitetest/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+?)/?$ view.php?id=$1
当我访问时,它加载$_GET[“id”]值,一切正常。太棒了

但我希望它在(注意“view/”)下工作

因此,我尝试将
重写规则
替换为:

 RewriteRule ^view/(.+?)/?$ view.php?id=$1
但是没有用!它似乎没有从view.php加载$\u GET[]。我甚至尝试回显$\u GET[]值,但当我访问时,它显示为空白

所以我对它进行了编辑,看看这是否可行:

RewriteRule ^view-(.+?)/?$ view.php?id=$1
当我访问(注意“-”而不是“/”)时,它会这样做

那么这和斜杠有关系吗??我迷路了,一直在努力寻找答案

编辑:

我仍然有问题,但我在尝试时注意到:

 RewriteRule ^test/(.+)/?$ view.php?id=$1
而且成功了!
因此,似乎与“view.php”和“view/”存在冲突。。因此,在最坏的情况下,我将重命名view.php。但是我仍然想弄清楚到底出了什么问题。

我想这就是你在使用
(.+?)
-试着只使用
(.+)

你可以像这个视图一样一个接一个地跳过斜杠,但我不确定这是否解决了问题,因为斜杠是一个路径分隔符。因此,我认为你想要实现的目标是更好地遵循以下规则:

RewriteRule ^(.+\/)(.+\/)$ page.php?p=$1&id=$2

然后使用一个简单的php include($_GET['p'])从page.php包含您的页面

如果启用了多视图,则请求的url中的
view
view.php
文件冲突


使用htaccess中的
选项-MultiViews禁用它。

如果您有一个名为view的物理文件夹,我想可能会抛出它(尽管它不应该!)不,没有名为view的文件夹。我太迷路了哈哈。实际上,创建一个名为
view
的文件夹可以解决这个问题。但这是因为多视图将不再尝试将
view
view.php
匹配。不过最好还是禁用多视图。你会成功的。有时候最好去喝杯茶,等你回来的时候就很明显了!
/
不是正则表达式中的保留字符!同意:)对不起。。。无论如何,我不认为path部分可以在mod_rewrite中作为正则表达式匹配变量成功传递,是吗?