使用mod_rewrite .htaccess的信息

时间:2012-09-15 17:05:46

标签: .htaccess optimization mod-rewrite

我一直在努力摆脱我网站上的.php。我希望它看起来像example.com/about而不是example.com/about.php。我有它是否会重写它所以我可以在example.com/about中键入它,但我想要它是当我点击我的网站上的链接转到example.com/about它加载网址作为示例.com / about而不是example.com/about.php。总的来说,我希望这样每当有人在我的页面上加载任何东西时,url的末尾都没有.php。我的.htaccess现在看起来像这样,

RewriteEngine on

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/$ $1.php

谢谢。

2 个答案:

答案 0 :(得分:0)

  

但我希望它是当我点击我的网站上的链接转到example.com/about时它加载url作为example.com/about而不是example.com/about.php

要解决此问题,您需要将网站中的链接从example.com/about.php更改为example.com/about。当“在野外”链接仍然指向.php网址时,您仍然可以进行重定向,但除非您更改网站上的链接以删除扩展程序,否则会导致每个网页加载到您的服务器两次

至于重定向:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.+)\.php[\?\ ]
RewriteRule ^ /%1/ [L,R=301]

我不确定你的php扩展程序的规则是如何工作的,因为你匹配一个尾部斜杠但是当你用-f检查文件时,你会有一个迷失的尾随在你的文件名中斜杠:例如/some/path/to/the_file/.php代替/some/path/to/the_file.php

尝试:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.+?)/?
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^ /%1.php [L]

答案 1 :(得分:0)

试试这个:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

您不必更改网站的结构,因为它只是以“http://x.com/page”形式定位“格式错误”的URI而不是最后的扩展名。希望我帮忙!