隐藏php扩展,强制使用斜杠-常见问题,总是一个糟糕的答案.告诉我我做得对不对



我讨厌问这个问题,因为它被问了一百万次,但答案似乎永远都不令人满意,而且大多数线程似乎都被放弃了,没有一个可接受的答案。

这正是我需要做的(由于低因果报应,坏URL是故意的):

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

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

http://example.com/asdfsadfhttp://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]

正如我所说的,据我所知,即使使用子目录,这也能很好地工作。如果我遗漏了什么,还有什么知识渊博的人能告诉我吗。它可以改进还是缩短?

值得一提的是,我还删除了www:

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

它似乎运行良好。它包含在其他部分之后。这是最好的订单吗?

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

哦,我找到了这个问题的答案!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]

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

这将从所有url到php文件中删除".php"^_^希望我能帮助

相关内容

最新更新