我正在尝试使用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>
答案 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}的原因是因为它是一个多虚拟主机设置。