使用.htaccess强制将xxx.php URL转发到xxx

时间:2012-02-14 07:23:30

标签: php linux apache .htaccess url

我有一个网站,我已经运行多年了.php作为URL的一部分。我想把它换掉。但是现有的链接中包含.php。 重要提示:我认为很多人很快就会认为我在问“如何从我的网址中删除.php”这个微不足道的问题?我已经知道该怎么做了,它已经有效了。我的问题不是那么,所以请仔细阅读。这与SEO的现有链接和URL统一目的更相关。

目前我的.htaccess中有这个,所以URL工作时没有.php:

RewriteEngine On
Options +MultiViews

但是,有没有办法检测请求中是否包含.php并重新写入URL(换句话说,直接转发301转发)到省略.php的URL?

http://www.mydomain.com/our-services.php - > http://www.mydomain.com/our-services

在第一个回答的建议之后,我将其改为:

Options +MultiViews
RewriteEngine On 
RewriteBase / 

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule .* - [L]

RewriteRule ^(.+)\.php $1 [L,R=301]
RewriteRule ^(.+)$ $1.php [L]

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

ErrorDocument 404 /notfound

创建了无限重定向。

3 个答案:

答案 0 :(得分:2)

将以下内容添加到.htaccess中的DocumentRoot

MultiViews有其缺点。

Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

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

RewriteRule ^(.+)\.php$ $1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ $1.php [L] 

ErrorDocument 404 /notfound

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

阻止重定向循环。


RewriteCond %{HTTP_HOST} ^rhondasherwood\. 
RewriteRule ^(.*)$ %{HTTP_HOST}/$1 [R=301,L] 

是循环的原因。 按此顺序排列这些规则:

Options +MultiViews 
RewriteEngine On 
RewriteBase / 

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule .* - [L] 

答案 1 :(得分:1)

这是我的想法,但我记得用这些规则创建一个无限重定向循环。如果这不起作用,我会添加一个解决方法:

# Use temporary redirects for testing
# Use permanent redirects when you're satisfied
# (1) Redirect all .php requests
RewriteRule (.+)\.php $1 [L,R]

# (2) Rewrite all non-php requests
RewriteRule (.+)(?<!\.php) $1.php [L]

答案 2 :(得分:0)

请参阅:http://sicanstudios.com/how-to-remove-php-html-htm-extensions-with-htaccess/

你基本上只需要使用正则表达式。