隐藏php扩展,强制尾随斜线 - 常见问题,总是一个糟糕的答案.告诉我,如果我做对了

fre*_*ill 6 .htaccess mod-rewrite redirect

我不想问这个问题,因为它被问了一百万次,但答案似乎永远不会令人满意,大多数线程似乎都被抛弃而没有一个公认的答案.

这正是我需要做的事情(由于低业力,坏网址是故意的):

http://example.com/file.php 重定向到 http://example.com/file/

http://example.com/file 还必须重定向到 http://example.com/file/

http://example.com/asdfsadf并且http://examplecom/file/asdfasdf必须转到404页面

这是我在这里和其他地方的帖子拼凑而成的htaccess魔法.它似乎有效(与主题中大多数被遗弃的线程不同,总有一些奇怪的行为).

 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME}\.php -f
 RewriteRule ^([^/]+)/$ $1.php
 RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
 RewriteRule (.*)$ /$1/ [R=301,L]
 RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*[^.#?\ ]+\.php([#?][^\ ]*)?\ HTTP/ 
 RewriteRule ^(([^/]+/)*[^.]+)\.php http://example.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

就像我说的,据我所知,即使对于子目录,这也可以正常工作.任何知识渊博的人都可以告诉我,如果我错过了什么.可以改进还是缩短?

为了它的价值,我也删除了www:

 RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
 RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常.它包含在其他部分之后.这是最好的订单吗?

谢谢大家,我希望我们能够得到一个好的,可靠的答案,因为有很多不好的答案.

alt*_*alt 2

哦,这个问题我有答案了!.htaccess 中的这个小重写片段将从您在其 url 中指定的任何文件中删除扩展名。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteBase /
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://yourdomain.com/$1/ [L,R=301]
Run Code Online (Sandbox Code Playgroud)

只需将其粘贴到根目录中 .htaccess 文件的底部即可。该文件是隐藏的,因此请确保您的 ftp 中启用了“显示隐藏文件”。ETA:最后 3 行应在 yourcommain.com 上的所有文件中添加尾部斜杠,不要忘记正确替换 youdomain.com。

这将从您的所有 php 文件的 url 中删除“.php”!^_^ 希望有帮助

  • 这似乎也重写了对 CSS 的请求。 (2认同)