php - 是否附加了 SEO 友好的 URL?

标签 php .htaccess mod-rewrite seo

我通过谷歌搜索和查看不同示例构建了以下 htaccess 文件。

我的文件现在包含以下规则:

## Enable Rewrite Engine
RewriteEngine on 
Options +FollowSymlinks
RewriteBase /

## Add trailing slash to url
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://domain.com/$1/ [L,R=301]

## Rewrite URL to exclude wwww.
RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]

## Actual URL re-writes
RewriteRule ^profile/(.*)/? profile.php?pid=$1 [QSA,L] 
RewriteRule ^profile/(.*)/(.*)/? profile.php?pid=$1&view=$2 [QSA,L]

据我了解,这将重写 URL,例如 http://www.domain.comhttp://domain.com ,禁用目录文件列表 (+FollowSymLinks),以及在 url 中附加正斜杠,例如 http://domain.com/test并将其更改为 http://domain.com/test/所以在搜索引擎中只有一种表示该 URL 的方式。惊人的!但是,当我单击其中一个 HTML 面包屑中的链接时,我的 URL 会一直附加要重写的 url 部分...

示例:http:/domain.com/profile/1/shouts/pictures/all/all/all/all/all/ 如果我连续点击同一个链接...为什么这发生了? 这个问题快把我逼疯了!

我试过阅读 mod rewrite 备忘单和教程,但它们对我来说似乎没有任何意义:(

编辑:

我应该注意到我正在用(相对的?)链接回应我的 href 代码。这是正确的做事方式吗?

<a href="<?php echo "profile/". $p_id."/all" ?>">All</a>

编辑 2:

我也试过使用绝对链接,但遇到了同样的问题。我的 PHP 现在显示为:

<a href="<?php echo $websiteUrl. "profile/". $p_id."/all" ?>"> 

$websiteUrl = http://domain.com/ 有什么想法吗?

最佳答案

您的代码几乎是正确的,但仍需要进行一些小的更正。请试试这段代码:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /

## Rewrite URL to exclude wwww.
RewriteCond %{HTTP_HOST} ^www\.(domain\.com)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=302]

RewriteCond %{REQUEST_FILENAME} -f  [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

## Add trailing slash to url
RewriteRule (?!^.*/$)^ %{REQUEST_URI}/ [L,R=302]

## Your URL re-writes
RewriteRule ^profile/([^/]+)/?$ /profile.php?pid=$1 [NC,L,QSA]

RewriteRule ^profile/([^/]+)/([^/]+)/?$ /profile.php?pid=$1&view=$2 [NC,L,QSA]

一旦您确认它工作正常,请将 R=302 替换为 R=301。在测试您的 mod_rewrite 规则时避免使用 R=301(永久重定向)。

关于php - 是否附加了 SEO 友好的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16994961/

相关文章:

php - 将digitalocean上的wordpress迁移到阿里云上的另一台云服务器失败

.htaccess - 网站网址从自然搜索重定向到主页

.htaccess - 使用缓存 list /应用程序缓存时重定向到 HTTPS

.htaccess - 通配符子域和子文件夹作为 .htaccess 中的参数

regex - ^ 字符无法在 htaccess 中进行 mod 重写

mod-rewrite - 在 Ubuntu 下根本无法让 ModRewrite 工作

php - zend_mm_heap 错误与 simple_html_dom

php - 用双引号作为分隔符内爆

php - 如何在 Laravel 4 中设置 'plain' 异常处理程序

php - 如何将所有子域重定向到http而不是https