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
在地址栏。我认为两条规则之间存在一些冲突。
答案 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]