多个URL重写规则

时间:2013-12-03 09:09:57

标签: .htaccess url-rewriting

RewriteEngine  On 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html[L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_-]+)$ /profile.php?name=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ /profile.php?name=$1

这是我网站目前的.htaccess。重写假设有两个函数,将内部url example / profile.php / name = xyz作为外部url放入example / xyz,并删除html文件的扩展名。

但扩展删除不起作用,例如对于名为xyz.html的文件,它获得404和

example.com/xyz/?name=xyz

在地址栏。我认为两条规则之间存在一些冲突。

1 个答案:

答案 0 :(得分:0)

RewriteCond仅适用于下一个RewriteRule,因此您的上一条规则在没有任何RewriteCond的情况下运行。您还需要在所有规则中使用[L](最后)标记。

使用此代码:

RewriteEngine  On 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ /$1.html [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ /$1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([\w-]+)/?$ /profile.php?name=$1 [L]