【发布时间】:2013-06-04 09:38:29
【问题描述】:
我通过谷歌搜索和查看不同的示例构建了以下 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]
据我了解,这会将诸如 http://www.domain.com 之类的 URL 重写为 http://domain.com,禁用目录文件列表 (+FollowSymLinks),以及在诸如 http://domain.com/test 之类的 URL 上附加正斜杠并将其更改为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/ 有什么想法吗?
【问题讨论】:
-
不,如果您不想从当前所处的位置进入更深层次,则应该使用绝对 URL。相对 url 总是相对于你所在的 url。
-
刚刚尝试将链接更改为绝对链接,您可以检查我的编辑吗?奇怪的是,即使将链接更改为绝对路径后,浏览器左下方的 URL 工具提示仍显示为domain.com/profile/1//all。为什么这里有两个斜线?
标签: php .htaccess mod-rewrite seo