给出以下vhost:
<VirtualHost *:80>
ServerAdmin webmaster@domain.com
ServerName subdomain.domain.com
ServerAlias *.subdomain.domain.com
DocumentRoot /var/www/project/web/
<Directory /var/www/project/web/>
Options FollowSymLinks
AllowOverride All
</Directory>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^.*subdomain\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} !^subdomain\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://subdomain.domain.com$1 [R=301,L]
RewriteCond %{REQUEST_URI} !^/(static)/
RewriteRule ^(.*)$ /index.php [L]
ErrorLog /var/log/apache2/error_project.log
LogLevel warn
CustomLog /var/log/apache2/access_project.log vhost_combined
</VirtualHost>
我正在尝试将所有除以外的 / static (这是CSS,JS和图片所在的位置)的请求重定向到主控制器index.php ,它将处理到不同模块的路由。
一切正常,直到我尝试访问这样的链接:
http://subdomain.domain.com/view/10/Http%3A%2F%2Fnews.discovery.com%2Fspace%2Fnasa-installs-cosmic-ray-hunter
并且Apache2显示 404 页面,请求永远不会进入index.php文件。用短划线替换链接中的所有%3A 和%2F 使其再次起作用。
也尝试使用:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /index.php [L]
但同样的情况发生了。
答案 0 :(得分:0)
根据手册,为了提高安全性,Apache将拒绝所有包含编码斜杠<input>
且包含404的网址。
要停用此行为,您需要将AllowEncodedSlashes设置为%2F
或On
,最好是NoDecode
。
此指令需要全局放入服务器配置或虚拟主机定义中,并且不能在 .htaccess
中使用