目标是结合几个规则:
>绝对不要在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]