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