.htaccess RewriteRule在子目录中不起作用

时间:2011-03-31 03:06:51

标签: .htaccess subdirectory

我正在编写我的网站的新版本,我正试图让.htaccess正确地重写。我的新网站存储在这里:

www.example.com/storage/new/

我需要重写这些网址:

www.example.com/storage/new/welcome/   -> index.php?action=welcome
www.example.com/storage/new/page/name/ -> index.php?action=page&url=name
www.example.com/storage/new/post/name/ -> index.php?action=post&url=name

这是我的.htaccess文件:

RewriteEngine On

RewriteRule ^/welcome/$ index.php?action=welcome [L]
RewriteRule ^/page/([a-zA-Z0-9]+)/$ index.php?action=page&url=$1 [L]
RewriteRule ^/post/([a-zA-Z0-9]+)/$ index.php?action=post&url=$1 [L]
但是,它不起作用;所有结果都找不到404。我已尝试过所有内容,甚至输入www.example.com/storage/new/代替^。我在服务器根目录(www.example.com)中有另一个.htaccess,如下所示:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

我无法想象这会如何影响www.example.com/storage/new/,但你永远不知道。任何人都可以帮我这个吗?

2 个答案:

答案 0 :(得分:11)

我不得不通过电子邮件向服务器管理员发送电子邮件以获取帮助,结果证明.htaccess将自己的路径视为root用户;我只删除了每个规则中/之前的第一个^。我的最终.htaccess文件如下所示:

RewriteEngine On

RewriteRule ^welcome/$ index.php?action=welcome [L,QSA]
RewriteRule ^page/(.*)/$ index.php?action=page&url=$1 [L,QSA]
RewriteRule ^post/(.*)/$ index.php?action=post&url=$1 [L,QSA]

答案 1 :(得分:2)

^表示字符串的开头。 RewriteRules将查看example.com/之后的所有内容,因此您需要在模式中包含storage / new /(或删除^)。

另外我可能想要添加NC标志,以便您的模式匹配而不考虑区分大小写(例如/ Page /或/ page /都可以)。这意味着您可以将[a-zA-Z0-9]模式更改为[a-z0-9]

RewriteRule ^storage/new/welcome/$ index.php?action=welcome [L,NC]
RewriteRule ^storage/new/page/([a-z0-9]+)/$ index.php?action=page&url=$1 [L,NC]
RewriteRule ^storage/new/post/([a-z0-9]+)/$ index.php?action=post&url=$1 [L,NC]