我有一个网站,我已经运行多年了.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
创建了无限重定向。
答案 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/
你基本上只需要使用正则表达式。