【问题标题】:Adding a trailing slash after adding www and removing .php添加 www 和删除 .php 后添加斜杠
【发布时间】:2016-07-02 22:11:43
【问题描述】:

我有一个网站,其中包含 about.php、contact.php 和 test.php?id=xyz 等页面。

我添加了以下重定向以使其对 seo 友好。

Options -Indexes -MultiViews

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

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

# To internally forward /dir/file to /dir/file.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]

这给了我

mydomain.com                      =>  www.mydomain.com
mydomain.com/about.php            =>  www.mydomain.com/about
mydomain.com/test.php?id=12       =>  www.mydomain.com/test?id=12
mydomain.com/about/               =>  CSS Error

它工作得很好,除非我在最后添加一个斜杠,它给出的错误。所以要么建议我防止错误或添加尾部斜杠。

【问题讨论】:

  • 在页面 HTML 的 <head> 部分下方添加:<base href="/" />
  • 这对我也有用,除了现在 about 和 about/ 都在打开。它可能会创建 SEO 重复项。你说什么?

标签: php .htaccess url-redirection friendly-url


【解决方案1】:

选项 1:去掉斜线(有利于 SEO)

另外一个规则来处理带有斜杠的 URL 怎么样?

我会将它放在上面的 externallyinternally 重定向之间,如下所示:

RewriteRule ^(.*)/$ /$1 [L,R=301]

这应该将所有 URL 重定向到它们的无斜杠版本,然后再将它们重写为 PHP 文件。

选项 2:修复 CSS

我想你是在相对地引用你的样式表,比如

<style href="css/style.css" />

您可以将其更改为绝对引用

<style href="/css/style.css" />

无论假定的目录深度如何(在 URL 中用斜杠表示),它都应该可以工作。

结论

在这种情况下,我会选择选项 1,因为它为所有内容提供了一个 URL,我认为这是更可取的。

【讨论】:

  • 第一个对我来说完美无缺。感谢@Jan 的结论,它帮助我做出了最好的决定。
  • 在添加上述 htaccess 代码后,我注意到一个严重的问题。我在页面中的所有 Ajax 脚本都停止工作了。删除 htaccesss 文件后,它的工作。能解决吗?
  • 这些 AJAX URL 是什么样的?
  • $.ajax({ url:"verify.php", //包含php脚本的页面 type: "POST", //请求类型数据: { type: "send", to: " "}, 成功:function(result){ alert(result);
  • 呼叫是否重定向到/verify,被抓到是规则# To externally redirect /dir/file.php to /dir/file
猜你喜欢
  • 2014-03-04
  • 1970-01-01
  • 2012-03-18
  • 2017-07-14
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多