我已经通过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/
有什么想法?
答案 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
(永久重定向)。