RewriteRule匹配正则表达式但不转发

时间:2014-08-11 21:25:48

标签: php apache .htaccess mod-rewrite drupal

我“只是”试图改变URL,如

[AWEBSITE] / bgh / articles / 10/08/2009 / left-4-dead-2-scavenge-mode-announce

[AWEBSITE] / BGH /左-4-死-2-扫模式公布的

正则表达式匹配正确(使用http://www.regular-expressions.info/javascriptexample.html测试),但没有发生任何事情。我尝试过类似的规则,改为使用RedirectMatch 301:

RedirectMatch 301 ^/bgh/articles/([0-9]{2})/([0-9]{2})/([0-9]{4})/([^/]+)$ /bgh/$4?

网址转换正确,但留下“?”在末尾。如果我从该行中删除问号,它会正确转换URL,但会在末尾重新附加查询字符串。这是我在.htaccess中使用的内容:

AddType application/x-httpd-php53 .php

RewriteEngine on

RewriteRule ^bgh/articles/([0-9]{2})/([0-9]{2})/([0-9]{4})/(.*)$ bgh/$4

RewriteCond %{HTTP_HOST} ^awebsite\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.awebsite\.com$
RewriteRule ^/?$ "http\:\/\/www\.awebsite\.com\/bgh"

AddHandler application/x-httpd-php5 .html

另外,我正在使用Drupal和似乎是旧版本的Apache(例如,QSD标志会破坏我的.htaccess)。我把头发拉出来,我希望这里有一些非常简单的东西。

2 个答案:

答案 0 :(得分:0)

试试这个:

AddType application/x-httpd-php53 .php
AddHandler application/x-httpd-php5 .html

RewriteEngine on

RewriteRule ^bgh/articles/([0-9]{2})/([0-9]{2})/([0-9]{4})/(.*)$ bgh/$4? [L,NC,R=302]

RewriteCond %{HTTP_HOST} ^(www\.)?awebsite\.com$ [NC]
RewriteRule ^/?$ http://www.awebsite.com/bgh [L,R]

答案 1 :(得分:0)

假设您正在使用Apache httpd 2.4,您可以将[QSD]标记添加到RewriteRule的末尾以删除(放弃)查询字符串。如果您使用2.2或更早版本,则[QSD]标记不可用。但是,那个尾随?实际上并没有伤害任何东西,大多数网站用户都不会查看URL。如果您正在为虚构的" SEO"做这件事。好处,你几乎肯定会浪费时间,没有真正的实际利益。

另请注意,您不需要(并且不应该)转义RewriteRule目标中的字符。因此:

RewriteCond %{HTTP_HOST} ^(www\.)?awebsite\.com$
RewriteRule ^/?$ "http://www.awebsite.com/bgh"