0

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

2 回答 2

0

这应该工作

RewriteEngine On
RewriteRule ^docs/([a-z]+)/([A-Za-z0-9_-]+)/$ /docs/index.php?action=$1&target=$2 [QSA,L]
于 2012-09-14T10:28:41.237 回答
0

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

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

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

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

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

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

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

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

这就是我最终的结果:

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

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

于 2012-09-14T12:24:44.263 回答