.htaccess中的RewriteRule不起作用

时间:2014-07-17 15:54:04

标签: .htaccess url rewrite

我有一个网站,我需要为SEO原因显示一个网址,但实际的目标网页是一个略有不同的网址。我原本以为要求是to show the url which actually exists,但我不对。

所需网址:www.somesite.com/people/johndoe/?id = 10

实际存在的网址:www.somesite.com/people/?id = 10

我在我的.htaccess文件中尝试此操作,但无济于事:

RewriteRule ^/person/.+$ /person/$1 [R=301.L]

这似乎没有改变任何东西,我被告知我的网址不存在。 我在这个网站和其他地方查找了许多类似的问题,但找不到有效的解决方案。提前致谢

编辑(现有.htaccess):

# php_flag magic_quotes_gpc Off

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
#AuthName "username"
#AuthName "username"
#AuthUserFile "/home/something/.htpasswds/public_html/passwd"
#require valid-user

AuthName "username"
AuthUserFile "/home/something/.htpasswds/public_html/passwd"
RewriteCond %{HTTP_HOST} ^sitename.org$
RewriteRule ^(.*)$ "http\:\/\/www\.sitename\.org\/$1" [R=301,L]

2 个答案:

答案 0 :(得分:0)

使用mod_rewrite标志执行内部重写时使用R规则:

在root .htaccess中使用此代码:

RewriteEngine On

RewriteRule ^(people)/.+$ /$1 [L,NC]

答案 1 :(得分:0)

您的重写条件不能包含前导/。它被剥离了。使用

RewriteRule ^person/.+$ /person/$1 [R=301,L]

另请注意,您在旗帜中有句号,而不是逗号。

失去&#34;和最后的重写规则:

RewriteRule ^(.*)$ http://www.sitename.org/$1 [R=301,L]

我不知道你是否会因为多个301在行动中遇到任何麻烦。它可能取决于服务器配置。您是否需要修改后的URI才能返回访问者并在浏览器中看到?如果没有,则在该重写规则上丢失301。

通过评论记录您正在做的事情和原因。例如,你的最后两行是强制www.sitename.org而不是sitename.org。