SEO友好的URL被追加?

时间:2013-06-08 01:01:16

标签: php .htaccess mod-rewrite seo

我已经通过Google搜索并查看了不同的示例来构建以下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),并向{{3}等网址附加正斜杠。并将其更改为http://domain.com/test,因此搜索引擎中只有一个该URL的表示形式。真棒!但是,当我点击我的一个HTML面包屑中的链接时,我的URL会继续附加要重写的网址部分...

示例:http:/domain.com/profile/1/shouts/pictures/all/all/all/all/all/如果我不断点击同一个链接...为什么会这样? 这个问题让我绝对疯了!

我已经尝试过阅读mod重写cheatsheets和教程,但它们似乎对我没有任何意义:(

编辑:

我应该注意到,我正在用(相对?)链接回显我的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/有什么想法?

2 个答案:

答案 0 :(得分:0)

您可以在根目录下的一个.htaccess文件中尝试:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /

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

RewriteCond %{REQUEST_FILENAME} -f  [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* -  [L]

## Add trailing slash to url
RewriteCond %{REQUEST_URI} ^/(.*[^/]+)$
RewriteRule .*             /%1/   [L]

## Actual URL re-writes
RewriteCond %{REQUEST_URI} !profile\.php [NC]
RewriteRule ^profile/([^/]+)/?$ profile.php?pid=$1  [NC,L]

RewriteCond %{REQUEST_URI} !profile\.php [NC]
RewriteRule ^profile/([^/]+)/(.*)/? profile.php?pid=$1&view=$2 [NC,L]

答案 1 :(得分:0)

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

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(永久重定向)。