2015-09-10 36 views
2

这里是我的htaccess文件请看看添加新规则到我的htaccess文件来替换?通过/

ErrorDocument 404 /error404.php 
ErrorDocument 403 /error404.php 
Options -Indexes 
    RewriteEngine On 
    RewriteBase/

    RewriteCond %{REQUEST_METHOD} POST [NC] 
    RewriteRule^- [L] 

    RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain.*$ [NC] 
    RewriteRule \.(gif|jpg|png)$ http://www.domain.com [L] 
    RewriteCond %{HTTP_HOST} !^www\. 
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

    RewriteCond %{THE_REQUEST} \s/+page\.php\?brand=([^\s&]+) [NC] 
    RewriteRule^/%1? [R=301,L] 

    RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC] 
    RewriteRule^/%1 [R=302,L,NE] 

    ### rules to convert ?n1=v1&n2=v2 /n1/v1/n2/v2 

    RewriteCond %{THE_REQUEST} /profile\.php\? [NC] 
    RewriteCond %{QUERY_STRING} ^([^&]+)&(.*)$ 
    RewriteRule^%{REQUEST_URI}?%1/%2 [DPI,E=QS:1] 

    RewriteCond %{ENV:REDIRECT_QS} =1 
    RewriteCond %{QUERY_STRING} ^([^=]+)=(.*)$ 
    RewriteRule^%{REQUEST_URI}?%1/%2 [DPI,E=QS:1] 

    RewriteCond %{ENV:REDIRECT_QS} =1 
    RewriteCond %{QUERY_STRING} ^[^&=]+$ 
    RewriteRule ^(profile)\.php$ /$1/%{QUERY_STRING}? [L,NE,R=302] 

    # recursion rule to replace /n1/v1/n2/v2 to QUERY_STRING 
    RewriteRule ^(profile)(?:\.php)?/([^/]+)/([^/]*)(/.*)?$ /$1.php$4?$2=$3 [L,QSA] 

     ### end of convert ?n1=v1&n2=v2 /n1/v1/n2/v2 

     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC] 
     RewriteRule ^(.+?)/?$ /$1.php [L] 

     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.+)$ /page.php?brand=$1 [L,QSA] 

我想添加一个新的规则到这个文件可以替代这个网址www.domain.com/profile?id=2www.domain.com/profile/2

我是新来的htaccess请帮我

,一个重要的事情是,我应该能够在我的PHP代码

0123获取得到的变量来回ID
$idis=$_GET['id']; 
+0

https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&es_th=1&ie=UTF-8#q=htaccess%20rewrite%20query% 20string%20to%20path&es_th = 1 – samrap

+0

对不起,但没有帮助 –

回答

1

你的规则越来越相当复杂。随着这种正则表达式模式和顺序变得更加重要。拥有完整的的.htaccess就象这样:

ErrorDocument 404 /error404.php 
ErrorDocument 403 /error404.php 
Options -Indexes -MultiViews 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_METHOD} POST [NC] 
RewriteRule^- [L] 

RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain.*$ [NC] 
RewriteRule \.(gif|jpg|png)$ http://www.domain.com [L] 

RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

RewriteCond %{THE_REQUEST} \s/+page\.php\?brand=([^\s&]+) [NC] 
RewriteRule^/%1? [R=301,L] 

RewriteCond %{THE_REQUEST} \s/+profile(?:\.php)?\?id=([^\s&]+) [NC] 
RewriteRule^/profile/%1? [L,R=302] 

RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC] 
RewriteRule^/%1 [R=302,L,NE] 

### rules to convert ?n1=v1&n2=v2 /n1/v1/n2/v2 

RewriteCond %{THE_REQUEST} /profile\.php\? [NC] 
RewriteCond %{QUERY_STRING} ^([^&]+)&(.*)$ 
RewriteRule^%{REQUEST_URI}?%1/%2 [DPI,E=QS:1] 

RewriteCond %{ENV:REDIRECT_QS} =1 
RewriteCond %{QUERY_STRING} ^([^=]+)=(.*)$ 
RewriteRule^%{REQUEST_URI}?%1/%2 [DPI,E=QS:1] 

RewriteCond %{ENV:REDIRECT_QS} =1 
RewriteCond %{QUERY_STRING} ^[^&=]+$ 
RewriteRule ^(profile)\.php$ /$1/%{QUERY_STRING}? [L,NE,R=302] 

# recursion rule to replace /n1/v1/n2/v2 to QUERY_STRING 
RewriteRule ^(profile)(?:\.php)?/([^/]+)/([^/]*)(/.*)?$ /$1.php$4?$2=$3 [L,QSA] 

### end of convert ?n1=v1&n2=v2 /n1/v1/n2/v2 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

RewriteRule ^profile/([^/]+)/?$ profile.php?id=$1 [QSA,NC,L] 

RewriteCond %{DOCUMENT_ROOT}/$1\.php -f 
RewriteRule ^(.+?)/?$ $1.php [L] 

RewriteRule ^(.+)$ page.php?brand=$1 [L,QSA] 
+0

亲爱的先生,请你请告诉我如何取代所有?和=通过/在网址中,因为有很多步骤,我需要做到这一点。 我是100%你可以告诉我,因为是最好的htaccess文件。 虽然你的修改没有帮助我,但我接受了答案。因为答案是伟大的,有点与我想要的... –

+0

下面的规则转换规则?n1 = v1&n2 = v2/n1/v1/n2/v2是我在SO上的答案之一这就是他们所做的。如果由于某种原因无法为您工作,请随时发布新问题。我很乐意为您提供帮助。 – anubhava

+0

这里http://www.reurl.in/c2967ca1f先生我已经添加了与其他htaccess文件的另一个问题..它不与此htaccess链接..请看看,并请建议我的东西 –

1

尝试:

RewriteCond %{THE_REQUEST} /profile\?id=([^\s]+) [NC] 
RewriteRule^/profile/id/%1? [NC,L,R] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^profile/id/([^/]+)/?$ /profile/$1 [NC,L] 
+0

我应该把这段代码放在上面的文件中......我的意思是在开始或结束? –

+0

此代码剂量发送获取数据我无法接收从GET变量收到的数据 –

+1

您的其他规则覆盖此,请尝试添加下面的rewriterule =>“###规则转换?n = 1 ....” – starkeen

相关问题