2013-10-29 86 views
0

我想将mod重写应用到我的URL,使其更好,但我陷入了这个问题的所有困惑。htaccess国防部重写混淆

请你能帮助我什么,我想要做下面的例子:

我想从我的站点的根目录的任何变量连接到lyprofile.php页面

# Turn mod_rewrite on 
RewriteEngine On 

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

我想这样的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/

回答

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] 

如果你知道你的“我们”变量只能是数字或字母,你可以使规则更具规格IFIC:

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

+0

我已经试过这一遍又一遍,它只是说,URL无法找到;我做错了什么! –

+0

@JackTrowbridge确保一切都在正确的位置,确保mod_rewrite已打开,确保正在读取您的htaccess文件,确保您可以访问目标(例如lysettings.php和lyprofile.php),检查错误日志, –

+0

我有,但也有另一个问题,我认为这种方法使我无用。当我确实让它与其他代码一起工作时,例如我有url重定向到lysettings.php的“profile/settings”;问题出在lysettings.php中,它的行为就像它具有url profile/settings一样,所以所有样式表和链接都没有找到,因为它们是从root引用的;它不重定向它基本上作为网址?这是正常的吗? –

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]