2013-07-01 203 views
6

是我的.htaccess文件多的htaccess重写规则

Options -Indexes 
RewriteEngine On 
RewriteCond %(REQUEST_FILENAME) !-f 
RewriteCond %(REQUEST_FILENAME) !-d 
RewriteRule ^([a-z0-9]+)$ /profile.php?username=$1 [L] 
RewriteRule ^([a-z0-9]+)$ /display.php?page=$1 [L] 

对于是否能够正常工作的第一个代码,并显示如下: www.site.com/user

第二个不工作,通常是像这样显示www.site.com/display.php?page=10。我想显示这样的网页www.site.com/article 我尝试过不同的事情,没有结果。请告诉我如何使用多个规则。也请给我一个关于如何在php中使用这个功能的建议,因为我认为我做的不是很好。我使用这个规则的PHP代码:

<p><a class="button" href="/<?php echo $user_data['username']; ?>"> Profile</a></p> 

它的工作原理,但也许是一个更好的方法,使一个链接采取的htaccess的优势。

回答

17

你有冲突的两个规则,使用的模式是完全一样,这意味着,除了只适用于第一条规则的条件,两条规则完全不可区分。

鉴于这种网址:

http://www.site.com/blah 

是 “blah” 页面或用户?无法分辨,因为两个规则的正则表达式模式(^([a-z0-9]+)$)与“blah”匹配。因此,无论使用什么,第一个将始终得到应用。您需要添加东西2加以区分,像包括URL中的“用户”或“页”:

http://www.site.com/user/blah 
http://www.site.com/page/bleh 

而且你的规则看起来像:

Options -Indexes 
RewriteEngine On 

RewriteCond %(REQUEST_FILENAME) !-f 
RewriteCond %(REQUEST_FILENAME) !-d 
RewriteRule ^user/([a-z0-9]+)$ /profile.php?username=$1 [L] 

RewriteCond %(REQUEST_FILENAME) !-f 
RewriteCond %(REQUEST_FILENAME) !-d 
RewriteRule ^page/([a-z0-9]+)$ /display.php?page=$1 [L] 
+1

谢谢。现在更清楚了。 –

0

我做这个工作喜欢这个。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /domain/index.php/$1 [C] 

#second condition and rule 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /domain/subdir/index.php/$1 [L] 
2
Options -Indexes 
RewriteEngine On 

RewriteCond %(REQUEST_FILENAME) !-f 
RewriteCond %(REQUEST_FILENAME) !-d 
RewriteRule ^user/([a-z0-9]+)$ /profile.php?username=$1 [N] 
RewriteRule ^page/([a-z0-9]+)$ /display.php?page=$1 [L] 

使用[N](下一步)继续添加规则,以相同的条件下 和[L](最后一个),以确定最后的规则

+0

https://www.cheatography.com/davechild/cheat-sheets/mod-rewrite/ –