htaccess mod重写混乱

时间:2013-10-29 15:52:45

标签: .htaccess mod-rewrite

我正在尝试将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/

2 个答案:

答案 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]