0

我正在尝试对我的 URL 应用 mod 重写以使其更好,但我被这个主题的所有困惑所困扰。

请你帮我看看我想做的以下例子:

我想将站点根目录中的任何变量附加到 lyprofile.php 页面

# Turn mod_rewrite on
RewriteEngine On

RewriteCond %{THE_REQUEST} /(.*)
RewriteRule /(.*) lyprofile.php?us=$1

我想要一个诸如 profile/settings 之类的 url 去 lysettings.php

# Turn mod_rewrite on
RewriteEngine On

RewriteCond %{THE_REQUEST} /profile/settings
RewriteRule /profile/settings lysettings.php

如果工作的话,这两个示例应该可以帮助我计算出所有其他 URL,但我无法让这些工作。

你还需要一个绝对 URL,因为我在我的本地机器上工作,一个绝对 URL 只会造成很多麻烦。以防万一我的绝对 URL 是http://localhost/Linku2.5/

4

2 回答 2

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]

如果你知道你的“us”变量只能是数字或字母,你可以让规则的行更具体一点:

RewriteRule ^([A-Za-z0-9]+)$ lyprofile.php?us=$1 [L,QSA]

等等

于 2013-10-29T16:30:00.553 回答
0

你可以在 vhosts 配置中检查这个吗?

# 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]
于 2013-10-29T16:26:30.537 回答