我希望我的虚拟主机重写网址,例如:
的 http://dev.example.com/cool/story/bro
要:
的 http://dev.example.com/index.php?url=cool/story/bro
除非指定现有文件,例如:
的 http://dev.example.com/images/duck.png
它工作正常,但当我有一个使用现有文件夹的网址,如:
的 http://dev.example.com/images
奇怪地重定向到:
的 http://dev.example.com/images/?url=images
何时应改写为:
的 http://dev.example.com/index.php?url=images
这是我目前的代码:
<VirtualHost *:80>
ServerName dev.example.com
DocumentRoot /var/www/dev/public
php_flag display_errors 1
php_value error_reporting 30719
<Directory "/var/www/dev/public">
RewriteBase /
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [L]
</Directory>
</VirtualHost>
我一直在努力修复它几个小时,但我看不出问题,希望你能提供帮助。
答案 0 :(得分:0)
除了现有文件之外,您还要为现有目录指定RewriteCond。
RewriteBase /
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ index.php?url=$1 [L]
答案 1 :(得分:0)
我来寻找这个问题的解决方案,而@Chris Hendry的评论暗示重写日志在调试时非常有帮助。
不完全是,但您可以将重写操作记录到您可以遵循的日志中。 RewriteLog&#34; /path/to/file/rewrite.log" RewriteLogLevel 3 httpd.apache.org/docs/2.2/mod/mod_rewrite.html#RewriteLogLevel - Chris Hendry
我将问题跟踪到Apache,在没有它的情况下请求文件夹时自动添加尾部斜杠,如下所示:https://stackoverflow.com/questions/13354238#answer-13354276
Apache看到已经请求了一个目录,并导致301重定向到&#34;更正&#34;位置。
当我将此指令添加到我的.htaccess文件时(在您的情况下,它应该在vhost本身中工作),我已经解决了这个问题:
DirectorySlash Off
修改:确保在再次测试之前清除缓存。 301重定向是缓存。