.htaccess中的两个重写规则

时间:2013-03-23 15:54:23

标签: html regex .htaccess web-applications

目前我有以下代码从网址中删除.php

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

但我还想用URL中的/替换文件名中的字符_。 我试过这样做,但我只是得到了一些奇怪的错误。 有谁知道怎么做?

1 个答案:

答案 0 :(得分:0)

由于您声明只有零个或一个下划线可能是所请求文件的一部分,因此这应该有效:

RewriteCond %{REQUEST_URI} \.php$ [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME}\.php !-f
RewriteRule .* - [S=2]
RewriteRule ^(.*)$ $1.php
RewriteRule ^([^_]+)_([^_]+)$ $1/$2 [L]

仅当所有前三个条件都为真时才应用两个规则(不仅仅是第一个)>规则否定条件并在之后应用跳过规则:[S=2]表示“跳过以下内容2条规则“。

因此,如果所有新的三个条件都为假(因此它们的否定为真),则第一次重写将.php附加到所有请求。第二次重写将所有下划线更改为斜线并停止重写。