我正在编写我的网站的新版本,我正试图让.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/
,但你永远不知道。任何人都可以帮我这个吗?
答案 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]