【问题标题】:mod_rewrite don't match on RewriteCond target - URL not foundmod_rewrite 与 RewriteCond 目标不匹配 - 找不到 URL
【发布时间】:2012-09-07 12:03:38
【问题描述】:

我正在尝试使用 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-host 设置。

我的问题是什么,我该如何解决?

我在 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>

【问题讨论】:

    标签: mod-rewrite apache httpd.conf


    【解决方案1】:

    好的,为了修复它,我必须做几件事,使用@donalds 建议(我之前实际上尝试过):

    1 - 我必须有一个“?”在 RewriteRule 的正则表达式的末尾:

    ^/docs/([a-z]+)/([A-Za-z0-9_-]+)/?$

    然后我可以选择地址末尾是否有'/'。

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

    ^/docs/([a-z]+)/([A-Za-z0-9_-]+)$

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

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

    这就是我最终的结果:

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

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

    【讨论】:

    • 如果你以)/?$而不是)$结束目标字符串,无论你是否有斜杠,它都会匹配。
    • 没错,你的例子中确实有这个,忘了它。那当然更好。更新我的答案。谢谢!
    【解决方案2】:

    这应该可以工作

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

    【讨论】:

    • 谢谢!我仍然遇到同样的错误。用我的 VirtualHost 定义更新了我的答案。我认为它应该工作,但它没有,不知道为什么。
    猜你喜欢
    • 1970-01-01
    • 2016-10-16
    • 2012-06-26
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多