目标是结合多个规则:
这是在'.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)直接。
答案 0 :(得分:5)
您可以使用此代码:
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]
答案 1 :(得分:0)
可以启用/禁用名为DirectorySlash
的apache中的单独设置。您可以在httpd.apache.org/docs/2.2/mod/mod_dir.html#directoryslash阅读更多内容,但请务必阅读有关为什么会在下面的内容中执行此操作的部分"一些很好的理由"。另请注意安全问题。