Php多个mod重写规则冲突

时间:2013-12-11 10:13:14

标签: php apache .htaccess mod-rewrite conflict

我正在尝试从

清理我的网址

localhost/xxx/profile.php?name=google

localhost/xxx/google

以下是我的htaccess文件

    RewriteEngine On
    RewriteBase /creatorsink/
    RewriteRule ^([a-z]+)/?$ profile.php?name=$1 [L,QSA]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^(.*)$ $1.php [L]

如果我删除RewriteRule ^(.*)$ $1.php [L]它正常工作,如果我这样做,那么url不会在没有.php扩展名的情况下打开

有没有办法在不相互冲突的情况下使用它们。

1 个答案:

答案 0 :(得分:0)

规则的排序导致问题。你的第一条规则就是抓住每个URI。颠倒顺序,让你的第一条规则变得更加聪明。

RewriteEngine On
RewriteBase /creatorsink/

RewriteRule ^([^/]+)/?$ profile.php?name=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/creatorsink/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]