htaccess重写url和重定向

时间:2014-10-01 12:41:24

标签: php .htaccess

我想知道如何将此网址profile.php?user=1重写为/user/1。 我知道这可以通过.htaccess来完成。这是我尝试过的,它工作正常,但唯一的问题是它

RewriteCond %{THE_REQUEST} \s/+profile\.php\?user=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=302,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ profile.php?user=$1 [L,QSA]

除了这些代码,我的.htacces也有这些代码

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain.*$ [NC] 
RewriteRule \.(gif|jpg|png)$ http://www.domain.com [L]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
ErrorDocument 404 /error404.php
ErrorDocument 403 /error404.php
Options -Indexes 

RewriteCond %{THE_REQUEST} \s/+page\.php\?pagename=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /page.php?pagename=$1 [L,QSA]

请告诉我,我的.htaccess页面是否正确。我不擅长htaccess

2 个答案:

答案 0 :(得分:1)

改变这个:

RewriteCond %{THE_REQUEST} \s/+profile\.php\?user=([^\s&]+) [NC]
RewriteRule ^ /%1? [R=302,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ profile.php?user=$1 [L,QSA]

为:

RewriteCond %{THE_REQUEST} \s/+profile\.php\?user=([^\s&]+) [NC]
RewriteRule ^ /user/%1? [R=302,L]

RewriteRule ^user/([^/]+)/?$ profile.php?user=$1 [L,QSA]

确保页面有绝对链接或将其添加到页面标题中:

<base href="/" />

否则,您的所有链接都将被破坏。

答案 1 :(得分:0)

在htacess重写中,您希望实际上将url结构重定向到不同的URL

如果您有指向profile.php?user = 1的链接,则必须将其更改为:profile.php/user/1然后告诉您的htacess将此地址重定向到此profile.php?user=1

你可以这样做:

RewriteRule ^user/(.*)$        index.php?&user=$1

如果您想测试一些htaccess,我会重新定位这个usedul网站:http://htaccess.madewithlove.be/