在我正在制作的小型投资组合网站中,我想拥有干净的网址。为此,我使用.htaccess文件。目前我的网站运行在127.0.0.1/website。我的.htaccess看起来像这样:
RewriteEngine On
RewriteBase /website
RewriteRule ^about$ index.php?page=0 [L,NC]
RewriteRule ^portfolio$ index.php?page=1 [L,NC]
RewriteRule ^cv$ index.php?page=2 [L,NC]
RewriteRule ^contact$ index.php?page=3 [L,NC]
RewriteRule ^.*$ about [L,R]
如果我删除最后一行,一切正常。我可以转到127.0.0.1/website/about
,服务器会显示127.0.0.1/website/index.php?page=0
,而网址不会更改。但是,我希望每个其他网址都被重定向到127.0.0.1/website/about
,我尝试用最后一行做到这一点。但是,如果我现在尝试转到127.0.0.1/website/anything
,其中包含任何字符串,则会将我重定向到127.0.0.1/website/about?page=0
。除此之外,我希望127.0.0.1/website/about
处理正常,因为第一个重写规则的Last标志,但是这会将我重定向到同一个坏网址。
我无法理解为什么这不起作用,而且很困惑,因为对我而言似乎它正在跳过最后一面旗帜。我希望有人可以指出我做错了什么。提前谢谢。
答案 0 :(得分:1)
最后一条规则会重写所有内容,因此模式必须更加具体
RewriteRule !^index\.php$ about [L,R]
答案 1 :(得分:1)
这可能有效:
RewriteEngine On
RewriteBase /website
RewriteRule ^about$ index.php?page=0 [L,NC]
RewriteRule ^portfolio$ index.php?page=1 [L,NC]
RewriteRule ^cv$ index.php?page=2 [L,NC]
RewriteRule ^contact$ index.php?page=3 [L,NC]
RewriteCond %{REQUEST_URI} !^/cv [NC]
RewriteCond %{REQUEST_URI} !^/about [NC]
RewriteCond %{REQUEST_URI} !^/contact [NC]
RewriteCond %{REQUEST_URI} !^/portfolio [NC]
RewriteRule ^.*$ /about [R,L]
它会将不是/cv
,/about
,/contact
或/portfolio
的所有内容重定向到/about
。