php-RewriteRule htaccess始终删除斜杠偶数目录

目标是结合几个规则:

>绝对不要在URI中出现斜线
>在调用domain.tld / somedir时内部重写为index.php(domain.tld / somedir / index.php)
>删除文件扩展名,检查’.php’是否存在,并最终在内部对其进行重写

这将在’.htaccess’中完成,因为这是我唯一可访问的.

到目前为止我的尝试

# check if *.php exists
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*[^/])/?$$1.php [L, QSA]

# do not allow trailing slash
RewriteRule (.*)/ $1 [L, R=301]

这里的困难在于查询“ domain.tld / somedir”通常在重定向到“ domain.tld / somedir /”后通常调用目录的index.php.但是,我希望在查询“ domain.tld / somedir”时直接在内部调用index.php(无301).

解决方法:

您可以使用以下代码:

DirectoryIndex index.php
RewriteEngine On

# remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s]
RewriteRule ^(.+?)/$/$1 [R=301,L]

# To internally forward /dir/file to /dir/file.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f [NC]
RewriteRule ^(.+?)/?$/$1.php [L]
上一篇:Php处理与Apache RewriteRules和RegExp:哪一个更快?


下一篇:php-Apache Mod Rewrite:带有L参数的RewriteRule.怎么了?