Mod rewrite mod#u重写don';重写第二个目标时不匹配-找不到URL
我正在尝试使用apaches mod_rewrite模块将目录/docs中的所有URI重写为/docs/index.php URI不作为目录结构存在,我认为当您将URI重写为退出的内容时,不需要这样做 我得到一个错误: “在此服务器上找不到请求的URL/docs/view/my_doc。” 以下是我的重写规则:Mod rewrite mod#u重写don';重写第二个目标时不匹配-找不到URL,mod-rewrite,apache,httpd.conf,Mod Rewrite,Apache,Httpd.conf,我正在尝试使用apaches mod_rewrite模块将目录/docs中的所有URI重写为/docs/index.php URI不作为目录结构存在,我认为当您将URI重写为退出的内容时,不需要这样做 我得到一个错误: “在此服务器上找不到请求的URL/docs/view/my_doc。” 以下是我的重写规则: RewriteEngine On RewriteCond %{REQUEST_URI} ^docs/([a-z]+)/([A-Za-z0-9_-]+)/?$ Rewri
RewriteEngine On
RewriteCond %{REQUEST_URI} ^docs/([a-z]+)/([A-Za-z0-9_-]+)/?$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/docs/index.php?action=$1&target=$2 [QSA,L]
我正在httpd.conf中进行配置。此外,我正在使用多v主机设置
我的问题是什么?如何解决
我在CentOS 6.2上使用Apache/httpd
更新 包括我的虚拟主机:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.smicloud.org
ServerAlias *.smicloud.org
VirtualDocumentRoot /var/www/html/www.smicloud.org
ExpiresActive On
ExpiresDefault "access plus 14 days"
# insert logging config, anything else you need..
#Define FileEtag so it doesnt use node
FileETag MTime Size
<Directory /var/www/html/>
Order Allow,Deny
Allow from all
# Get rid of this if you need to allow htaccess files:
AllowOverride None
</Directory>
RewriteEngine On
RewriteRule ^docs/([a-z]+)/([A-Za-z0-9_-]+)/$ /docs/index.php?action=$1&target=$2 [QSA,L]
</VirtualHost>
NameVirtualHost*:80
服务器名www.smicloud.org
ServerAlias*.smicloud.org
VirtualDocumentRoot/var/www/html/www.smicloud.org
过期于
ExpiresDefault“访问加14天”
#插入日志配置,您需要的任何其他内容。。
#定义FileTag,使其不使用节点
FileTag MTime大小
命令允许,拒绝
通融
#如果需要允许htaccess文件,请删除此选项:
不允许超限
重新启动发动机
重写规则^docs/([a-z]+)/([a-Za-z0-9_-]+)/$/docs/index.php?动作=1美元,目标=2美元[QSA,L]
这应该行得通
RewriteEngine On
RewriteRule ^docs/([a-z]+)/([A-Za-z0-9_-]+)/$ /docs/index.php?action=$1&target=$2 [QSA,L]
好的,为了修复它,我必须做几件事,使用@donalds建议(我以前确实尝试过): 1-我必须在regex of RewriteRule的末尾有一个“?”: ^/文件/([a-z]+)/([a-Za-z0-9_-]+)/$ 然后我可以选择在地址的末尾是否有一个“/” 2-我必须在我的重写规则的正则表达式的开头添加一个“/”。即: ^/文件/([a-z]+)/([a-Za-z0-9_-]+)$ 3-我还必须将“http://%{http_HOST}/”部分添加到新URI中:
http://
%{http\u HOST}/docs/index.php?操作=$1和目标=$2[QSA,L]
这就是我的结局:
重写规则^/docs/([a-z]+)/([a-Za-z0-9_-]+)$
http://
%{http\u HOST}/docs/index.php?操作=$1和目标=$2[QSA,L]
也许我需要添加%{HTTP:HOST}的原因是因为它是一个多虚拟主机设置 谢谢!我还是会犯同样的错误。用我的虚拟主机定义更新了我的答案。我认为它应该工作,但它不工作,无法找出原因。如果目标字符串的结尾是
)/?$
,而不是)$
,那么它将匹配是否有尾随斜杠。是的,在您的示例中确实有,忘了它吧。那当然更好。更新我的答案。谢谢