添加 www 和删除 .php 后添加斜杠

Posted

技术标签:

【中文标题】添加 www 和删除 .php 后添加斜杠【英文标题】:Adding a trailing slash after adding www and removing .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 重复项。你说什么? 【参考方案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

以上是关于添加 www 和删除 .php 后添加斜杠的主要内容,如果未能解决你的问题,请参考以下文章

PHP:如何将斜杠添加到绝对 URL

从 Laravel 中的 JSON 字符串中删除添加的反斜杠

PHP 字符串整理归类

apache_conf 删除文件扩展名,在末尾添加尾部斜杠(http://alexcican.com/post/how-to-remove-php-html-htm-extensions-with-h

Laravel - 使用 Redirect::route() 添加斜杠

php json_encode()在斜杠之前自动添加斜杠[重复]