使用url重写的奇怪重定向

时间:2014-11-01 10:32:44

标签: apache .htaccess mod-rewrite url-rewriting

我的.htaccess文件是:

RewriteEngine on

RewriteRule (.*) index.php?_url=$1 [QSA,L]

在大多数情况下它完美无缺。但如果请求的网址作为真实文件夹存在,那就太疯狂了。

例如,当我请求/random时,它会被重写为index.php?_url=random,状态代码为200,但对于/static(这是Web服务器上的现有目录),它会给出301重定向到/static/?_url=static

2 个答案:

答案 0 :(得分:0)

将以下代码用于.htaccess

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

答案 1 :(得分:0)

如果要排除现有文件和目录的重写,请使用RewriteCond

进行重写
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?_url=$1 [QSA,L]