使用 .htaccess 删除 .php 扩展名会重复我的页面吗?

Posted

技术标签:

【中文标题】使用 .htaccess 删除 .php 扩展名会重复我的页面吗?【英文标题】:Does removing .php extension with .htaccess duplicate my pages? 【发布时间】:2018-10-20 12:41:11 【问题描述】:

我刚刚删除了我网络上文件的 .php 扩展名,将此代码添加到我的 .htaccess 文件中(当我第一次打开文件时第一行已经存在):

AddHandler application/x-httpd-php71 .php .php5 .php4 .php3

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME.php -f
RewriteRule ^(.*)$ $1.php
</IfModule>

事实上,现在我可以通过 misite.com/shop 和 misite.com/shop.php 两种方式访问​​我的网站

这是否会影响我的页面 SEO,因为可以通过两种不同的方式访问同一页面,或者这不会意味着任何问题?

我想更改的另一件事是,当我单击我的索引站点时,它显示为 mysite.com/index(因为现在我已经删除了 .php 扩展名)。我怎样才能使它只显示“mysite.com”而没有“/index”?

【问题讨论】:

您可以随时重写 PHP 文件以不包含 .php 后缀。 【参考方案1】:

以下代码将帮助您删除.php 扩展并在不使用.php 格式的情况下将其重定向:

## hide .php extension snippet
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %THE_REQUEST \s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

这是您处理 SEO 相关问题的元代码。使用rel="canonical",用于让搜索引擎知道页面的原始URL。下面是一个例子,它会让机器人知道 URL http://example.com/ 是 http://example.com/index 的实际 URL

<link rel="canonical" href="http://example.com/" />

在锚文本中,&lt;a href="./"&gt;Home&lt;/a&gt; 而不是 &lt;a href="index.php"&gt;Home&lt;/a&gt;

我希望这个答案对你有用。

【讨论】:

谢谢先生,我将该代码添加到我的 .htaccess 中,现在当我在浏览器上键入 mysite.com/shop.php 时,它会立即重定向到 mysite.com/shop,就像我想要的那样。但是,我不明白 rel="canonical" 的用法。想象一下我在我的 shop.php 文件中,我是否必须在文件的头部添加 example.com/shop.php" /> 或 ?感谢您的回答 应该是&lt;link rel="canonical" href="http://example.com/shop" /&gt;,因为example.com/shop.php 会将您重定向到example.com/shop。我认为您不会希望机器人进入循环。 @Luiscri Okei,我会将它添加到我网络上的每个文件中。我发现通过这些更改,我添加了我的联系表已停止工作。当您单击提交按钮时,它使用 action="submit.php" 功能,如果我尝试发送消息,这似乎是一个问题,因为邮件不会发送。它一直在工作,直到我用你给我的东西改变了 .htaccess,我需要做任何额外的实现吗? 它不起作用,因为您的 /submit.php 会将其重定向到 /submit 并且重定向后,您的 $_POST 变量将为空.要消除此错误,请使用action="submit" 而不是action="submit.php" 没错!感谢您抽出宝贵时间,先生,我认为这将是更难解决的问题。我在访问我的网站时发现的最后一件事是,我有一个锚点,他们重定向到一个特定的元素,并以这种方式标记为 &lt;a href="shop.php#elementId",当我点击锚点时,它会正确地进行重定向,但 url 出现在标签上(以这种方式显示 mysite.com/shop#elementId)。如何删除该标签,使其仅显示 /shop ,就好像我没有重定向到该元素一样?

以上是关于使用 .htaccess 删除 .php 扩展名会重复我的页面吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用.htaccess删除扩展名,但保留参数会导致页面样式不符

使用 .htaccess 删除 .php 扩展名

使用 .htaccess 文件删除 .php 文件扩展名

尝试使用 .htaccess 文件删除 .php 扩展名时出现 403 禁止错误

使用 .htaccess 删除 .html 和 .php 扩展名

.htaccess 文件 - 删除 .php 扩展名“服务器错误”[重复]