Mod rewrite mod#u重写don';重写第二个目标时不匹配-找不到URL

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

我正在尝试使用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_-]+)/?$
   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}的原因是因为它是一个多虚拟主机设置

谢谢!我还是会犯同样的错误。用我的虚拟主机定义更新了我的答案。我认为它应该工作,但它不工作,无法找出原因。如果目标字符串的结尾是
)/?$
,而不是
)$
,那么它将匹配是否有尾随斜杠。是的,在您的示例中确实有,忘了它吧。那当然更好。更新我的答案。谢谢