我讨厌问这个问题,因为它被问了一百万次,但答案似乎永远都不令人满意,而且大多数线程似乎都被放弃了,没有一个可接受的答案。
这正是我需要做的(由于低因果报应,坏URL是故意的):
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]
正如我所说的,据我所知,即使使用子目录,这也能很好地工作。如果我遗漏了什么,还有什么知识渊博的人能告诉我吗。它可以改进还是缩短?
值得一提的是,我还删除了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"^_^希望我能帮助