目前我有以下代码从 url 中删除 .php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
但我也想用 URL 中的 / 替换文件名中的字符 _ 。我试过这样做,但我只是得到一些奇怪的错误。有人知道怎么做吗?
目前我有以下代码从 url 中删除 .php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
但我也想用 URL 中的 / 替换文件名中的字符 _ 。我试过这样做,但我只是得到一些奇怪的错误。有人知道怎么做吗?
由于您声明只有零或一个下划线可能是请求文件的一部分,所以这应该有效:
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
到所有请求。第二次重写将所有下划线更改为斜线并停止重写。