htaccess代码删除扩展名和添加+强制尾随斜杠?

8 .htaccess mod-rewrite url-rewriting

我正在尝试将一些htaccess代码放在一起,将example.com/filename.php转换为example.com/filename/(并强制斜杠) - 我尝试了各种各样的方法,但每个方法都没有正常工作,从子文件夹上的500个错误到尾部斜杠的问题等...

请帮忙!

Gum*_*mbo 13

试试这个:

RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
RewriteRule (.*)\.php$ /$1/ [L,R=301]

RewriteRule (.*)/$ $1.php [L]
Run Code Online (Sandbox Code Playgroud)

第一条规则将外部请求重定向到.第二条规则重写内部请求./foo/bar.php/foo/bar//foo/bar//foo/bar.php

要强制尾随斜杠,请尝试以下规则:

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule .*[^/]$ $0/ [L,R=301]
Run Code Online (Sandbox Code Playgroud)


小智 6

这个Gumbo解决方案非常适合文件,但它不适用于目录.换一种说法:

因为mysite.com/file1.php,它显示mysite.com/file1/哪个是伟大的.然而,它对目录不起作用.如果我尝试访问以下目录(其中包含index.php文件)mysite.com/dir1,而不是显示http:/mysite.com/dir1/index.php和url:的内容mysite.com/dir1/,则返回404.

我的解决方案是:

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


RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)/$ $1.php [L]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule .*[^/]$ $0/ [L,R=301]
Run Code Online (Sandbox Code Playgroud)

换句话说,如果它是一个目录,不要做任何事情.

希望能帮助到你.

原始解决方案的另一个问题是,在我将路径更改为css文件并将图像更改为绝对路径之前,不会加载css和图像.

有没有其他方法可以解决它,而不是将网站中所有文件中的所有路径更改为绝对路径.

非常感谢.


Mat*_*lin 0

你可以尝试在这里解决这个问题。虽然问题的解决方案不相关(但......),但问题本身提供了一组重写规则,您可以在自己的站点中使用它们。

如果您需要 URL 中的符号,您可以只使用“.*”而不是特定的 A-Za-z0-9,但如果您正在寻找可能的尾部斜杠,您可能需要使用“.*?” 反而。这是一个标准的正则表达式功能,以避免“.*”的贪婪。