将目录名重写为php脚本名称 - 但允许结束斜杠

时间:2015-03-16 16:24:00

标签: regex apache .htaccess mod-rewrite url-rewriting

是的,我已经读过关于此的其他类似问题,这就是我提出这个可能的解决方案的方法:

# Turn on the mod_rewrite engine
RewriteEngine On

# IF the request filename with .php extension is a file which exists
RewriteCond %{REQUEST_FILENAME}.php -f

# AND the request is not for a directory
RewriteCond %{REQUEST_URI} !/$

# Redirect to the php script with the requested filename
RewriteRule (.*) $1\.php [L]

这可以通过重写请求,例如:/about-usabout-us.php,但如果你转到/about-us/ 就不会工作。

我尝试过以下但是没有用:

# Redirect to the php script with the requested filename
RewriteRule (.*)/? $1\.php [L]

它与第二个RewriteCond有什么关系吗?

基本上我希望它失败(如果可能)如果请求是针对真实文件OR目录,但是如果它既不存在,那么它应该重写为PHP脚本,无论请求是否有结尾斜杠。

可以这样做吗?

1 个答案:

答案 0 :(得分:1)

以这种方式遵守规则:

当.htaccess和.php文件位于子目录中时,请使用:

RewriteEngine On 

RewriteCond %{DOCUMENT_ROOT}/work/Client_Name/public_html/$1\.php -f [NC] 
RewriteRule ^(.+?)/?$ $1.php [L]

当.htaccess和.php文件直接在站点的根目录中时,请使用:

RewriteEngine On 

RewriteCond %{DOCUMENT_ROOT}$1\.php -f [NC] 
RewriteRule ^(.+?)/?$ $1.php [L]