添加 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 怎么样?
我会将它放在上面的 externally
和 internally
重定向之间,如下所示:
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 后添加斜杠的主要内容,如果未能解决你的问题,请参考以下文章
从 Laravel 中的 JSON 字符串中删除添加的反斜杠
apache_conf 删除文件扩展名,在末尾添加尾部斜杠(http://alexcican.com/post/how-to-remove-php-html-htm-extensions-with-h