mod_rewrite不匹配RewriteCond目标 - 找不到URL

时间:2012-09-14 10:18:46

标签: mod-rewrite apache httpd.conf

我正在尝试使用apach 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


更新

包括我的VirtualHost:

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>

2 个答案:

答案 0 :(得分:0)

这应该有效

RewriteEngine On
RewriteRule ^docs/([a-z]+)/([A-Za-z0-9_-]+)/$ /docs/index.php?action=$1&target=$2 [QSA,L]

答案 1 :(得分:0)

好的,使用@donalds建议(我之前尝试过),我必须做几件事才能修复它:

1 - 我必须有'?'在RewriteRule的正则表达式的末尾:

  

^ /文档/([A-Z] +)/([A-ZA-Z0-9 _-] +)/?$

然后我可以选择是否在地址的末尾加上'/'。

2 - 我必须在我的RewriteRule的正则表达式的开头添加一个'/'。即:

  

^ /文档/([A-Z] +)/([A-ZA-Z0-9 _-] +)$

3 - 我还必须将'http://%{HTTP_HOST} /'部分添加到新URI中:

  

http://%{HTTP_HOST} /docs/index.php?action=$1&target=$2 [QSA,L]

这就是我最终的结果:

  

RewriteRule ^ / docs /([a-z] +)/([A-Za-z0-9 _-] +)$   http://%{HTTP_HOST} /docs/index.php?action=$1&target=$2 [QSA,L]

也许我需要添加%{HTTP:HOST}的原因是因为它是一个多虚拟主机设置。