Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache mod_重写规则和内容协商_Apache_Mod Rewrite_Content Negotiation - Fatal编程技术网

Apache mod_重写规则和内容协商

Apache mod_重写规则和内容协商,apache,mod-rewrite,content-negotiation,Apache,Mod Rewrite,Content Negotiation,我对mod_rewrite比较陌生,但我有一个网站,我希望有“漂亮的URL”。类似于SO:) 我正在尝试像“改写为”这样的东西,并取得了一些有限的成功。我相信内容谈判正在阻碍我 首先,这里是我的test.htaccess文件: RewriteEngine on RewriteBase /~user/mysite/ RewriteRule ^search$ search/ [R] RewriteRule ^search/([^/]*)/?$ search.php?q=$1 [L] 不幸的是,它

我对mod_rewrite比较陌生,但我有一个网站,我希望有“漂亮的URL”。类似于SO:)

我正在尝试像“改写为”这样的东西,并取得了一些有限的成功。我相信内容谈判正在阻碍我

首先,这里是我的test.htaccess文件:

RewriteEngine on
RewriteBase /~user/mysite/

RewriteRule ^search$ search/ [R]
RewriteRule ^search/([^/]*)/?$ search.php?q=$1 [L]
不幸的是,它重定向到search.php,但没有在q变量中传递我的参数。但是,这确实有效:

事实上,如果将所有规则一起删除,则得到的结果与文件的第一个版本相同。所以我的结论是,既然apache很高兴地将“foo”重定向到“foo.php”,即使没有任何mod_重写规则,那么一定是内容协商在处理它。(如果我将foo.php重命名为foo.html,它仍然会找到文件,如果我只转到“foo”,这一事实进一步验证了这一点)

所以,问题是。如何在内容协商方面正确使用mod_rewrite?我可以为特定文件禁用它吗?有没有办法确保我的mod_重写规则在内容协商之前生效

如果相关,这里是apache conf中mod_userdir部分的conf文件(此测试站点位于我用户的homedir/public_html中):

#用户主目录的设置
#UserDir:附加到用户主页上的目录的名称
#如果收到~用户请求,则返回目录。请注意,还必须设置
#这些目录的默认访问控制,如下例所示。
UserDir public_html
#控制对UserDir目录的访问。下面是一个例子
#对于这些目录被限制为只读的站点。
AllowOverride文件信息AuthConfig限制索引
选项多视图索引符号链接所有者匹配包括noexec
命令允许,拒绝
通融
命令拒绝,允许
全盘否定
#Suexec并不是真的需要运行cgi脚本,但它是一个非常好的工具
#如果你有多个用户为网站服务。。。
选项执行CGI
SetHandler cgi脚本

在配置中查找此选项

Options +Multiviews
它将寻找

/foo/test
/foo/
/foo
并将它们重定向到

/foo.[any file]
基于它是否存在以及是否适合请求的内容类型

将选项更改为this可禁用此功能

Options -Multiviews

在配置中查找此选项

Options +Multiviews
它将寻找

/foo/test
/foo/
/foo
并将它们重定向到

/foo.[any file]
基于它是否存在以及是否适合请求的内容类型

将选项更改为this可禁用此功能

Options -Multiviews