如何从没有尾部斜杠的所有网址中删除.php?

时间:2014-02-26 22:29:04

标签: php .htaccess url mod-rewrite redirect

我需要从我网站上的所有网址中删除.php,如果有人输入完整网址,则需要重定向到php-extension-free版本。例如:

website.com/about.php -> website.com/about

我需要尽可能以SEO友好的方式做到这一点,所以我猜这将是301重定向,因此Google和其他人知道该页面在新的php-extension-free URL处有一个新位置。还必须避免使用任何重复内容,因此重要的是无法在旧网址和新网址上访问该网页,如果我所做的一切都很简单,那将会发生这种情况:

RewriteRule about about.php [L]

我已经看到了许多.htaccess方法,但它们似乎都在URL中添加了一个尾部斜杠。重要的是,这不会发生。

另外,我有几个页面发生了明确的HTTPS重定向,我需要确保不创建重定向循环。这是当前将这些页面重定向到HTTPS的代码。

RewriteCond %{HTTPS}  off
RewriteRule  ^(quote|quote_2).php$  https://website.com/$1.php  [R=301,L,QSA]
RewriteCond %{HTTPS}  on
RewriteCond %{REQUEST_URI}   !^/(quote|quote_2).php
RewriteCond %{REQUEST_URI}   !^/(.*)\.(css|png|js|jpe?g|gif|bmp|woff|svg|map)$
RewriteRule  ^(.*)$  http://website.com/$1  [R=301,L,QSA]

2 个答案:

答案 0 :(得分:1)

您可以在root .htaccess中使用此代码:

RewriteEngine On

RewriteCond %{THE_REQUEST} \s/+(?:index)?(.*?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]

RewriteCond %{HTTPS} off
RewriteRule ^(quote|quote_2)/?$ https://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTPS}  on
RewriteCond %{REQUEST_URI} !^/(quote|quote_2)
RewriteCond %{REQUEST_URI} !\.(css|png|js|jpe?g|gif|bmp|woff|svg|map)$
RewriteRule  ^(.*)$  http://%{HTTP_HOST}/$1  [R=301,L]

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

答案 1 :(得分:0)

可以找到以下答案here

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