繁体   English   中英

.htaccess中的两个重写规则

[英]Two rewrite rules in .htaccess

目前,我有以下代码从网址中删除.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]表示“跳过以下两个规则”。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM