【发布时间】:2017-05-22 01:02:39
【问题描述】:
给定以下虚拟主机:
<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]
但同样的 404 也会发生。
【问题讨论】:
标签: apache mod-rewrite