我正在尝试将mod重写应用到我的网址,以使其更好,但我陷入了这个主题的所有困惑。
请你帮我解决一下我想做的事情:
我想将来自我网站根目录的任何变量附加到lyprofile.php页面
# Turn mod_rewrite on
RewriteEngine On
RewriteCond %{THE_REQUEST} /(.*)
RewriteRule /(.*) lyprofile.php?us=$1
我想要个人资料(例如个人资料/设置)转到lysettings.php
# Turn mod_rewrite on
RewriteEngine On
RewriteCond %{THE_REQUEST} /profile/settings
RewriteRule /profile/settings lysettings.php
这两个例子如果有用,应该可以帮助我解决所有其他网址,但是我无法让这些工作起作用。
你还需要一个绝对的URL,因为我在我的本地机器上工作,绝对的URL只会引起很多麻烦。以防我的绝对网址为http://localhost/Linku2.5/
答案 0 :(得分:1)
您通常希望从最具体的规则转到最不具体的规则。在您要做的两件事中,第一件事是最不具体的,因为(.*)
可以是任何。因此,我们必须从更具体,更少任意的/profile/settings
开始。
如果这些规则在您的htaccess文件中(在您的情况下,在Link2.5
目录中),您不需要前导斜杠,只需:
# you only need to turn on once
RewriteEngine On
# Don't need absolute URLs, but you may need this line:
RewriteBase /Link2.5/
RewriteRule ^profile/settings lysettings.php [L]
然后,因为你的另一个规则是如此通用,你需要添加一些条件,这样你就不会导致无限循环(重写引擎将继续循环,直到URI停止变化):
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ lyprofile.php?us=$1 [L,QSA]
如果你知道你的“我们”变量只能是数字或字母,你可以使规则更具体一点:
RewriteRule ^([A-Za-z0-9]+)$ lyprofile.php?us=$1 [L,QSA]
等
答案 1 :(得分:0)
你能在vhosts config中查看吗?
# Turn mod_rewrite on
RewriteEngine On
RewriteRule lyprofile\.php - [L]
RewriteCond %{REQUEST_URI} /(.*)
RewriteRule /(.*) lyprofile.php?us=$1 [L]
RewriteCond %{REQUEST_URI} /profile/settings
RewriteRule /profile/settings lysettings.php [L]