我通过谷歌搜索和查看不同示例构建了以下 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.com至 http://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/