-1

我通过谷歌搜索和查看不同的示例构建了以下 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并将其更改为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/有人有什么想法吗?

4

1 回答 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=302R=301. R=301在测试你的 mod_rewrite 规则时避免使用(永久重定向)。

于 2013-06-08T07:18:49.920 回答