2014-09-19 4 views
1

.htaccess 파일이 정말 내 것이 아니다 내 모든 페이지에 대한 간편 URL을 얻을 수 내 htaccess로 리팩토링합니다. 그들은 여전히 ​​나에게 비밀을 유지하고 아마 항상 것입니다 ... 는 어떻게이

어쨌든, 그래서 나는 모든 다른 페이지에 꽤 재 작성 규칙과 htaccess로 파일이 있습니다.

URL :http://placeholder.com/OC/hoig/[page]

폴더 구조 :

목표는 꽤 (의미 얻을 수 있습니다) 모든 페이지의 URL입니다. 지금이 .htaccess 파일은 부분적으로 작동합니다. 거의 모든 페이지는 'Leerinhoud detail'을 제외하고 예쁜 URL을 얻습니다. 어떤 이유로 Leerinhoud에서 콘텐츠를 반환하지만 예쁜 URL (http://placeholder.com/OC/hoig/leerinhoud/1/the-slug) 아래에 있습니다. 그게 내가 정말 필요하지 않은 임시 리디렉션, 때문에

또한, 나는 [R = 302, L] 플래그에 대해 너무 확실하지 않다.

RewriteEngine On 
RewriteBase /OC/hoig/ 

RewriteCond %{THE_REQUEST} /news-detail\.php\?id=([^\s&]+)&news=([^\s&]+) [NC] 
RewriteRule^nieuws/%1/%2? [R=302,L] 
RewriteRule ^nieuws/([^/]+)/([^/]+)/?$ news-detail.php?id=$1&news=$2 [L,NC,QSA] 

RewriteCond %{THE_REQUEST} /leerinhoud\.php [NC] 
RewriteRule^leerinhoud [R=302,L] 
RewriteRule leerinhoud leerinhoud.php [L,NC,QSA] 

RewriteCond %{THE_REQUEST} /leerinhoud-detail\.php\?id=([^\s&]+)&leerinhoud=([^\s&]+) [NC] 
RewriteRule^leerinhoud/%1/%2? [R=302,L] 
RewriteRule ^leerinhoud/([^/]+)/([^/]+)/?$ leerinhoud-detail.php?id=$1&leerinhoud=$2 [L,NC,QSA] 

RewriteCond %{THE_REQUEST} /partners\.php [NC] 
RewriteRule^partners [R=302,L] 
RewriteRule partners partners.php [L,NC,QSA] 

RewriteCond %{THE_REQUEST} /contact\.php [NC] 
RewriteRule^contact [R=302,L] 
RewriteRule contact contact.php [L,NC,QSA] 

# RewriteCond %{THE_REQUEST} /search\.php\?q=([^\s&]+) [NC] 
# RewriteRule^search-results/%1? [R=302,L] 
# RewriteRule search-results/([^/]+)/?$ search.php?q=$1 [L,NC,QSA] 

RewriteCond %{THE_REQUEST} /rss-detail\.php\?rss=([^\s&]+) [NC] 
RewriteRule^rss/%1? [R=302,L] 
RewriteRule rss/([^/]+)/?$ rss-detail.php?rss=$1 [L,NC,QSA] 

RewriteCond %{THE_REQUEST} /tags\.php [NC] 
RewriteRule^tags [R=302,L] 
RewriteRule tags tags.php [L,NC,QSA] 

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

RewriteCond %{THE_REQUEST} /index\.php [NC] 
RewriteRule^nieuws [R=302,L] 
RewriteRule nieuws index.php [L,NC,QSA] 
:

목표

http://placeholder.com/OC/hoig/index.php-http://placeholder.com/OC/hoig/ http://placeholder.com/OC/hoig/leerinhoud.php-http://placeholder.com/OC/hoig/leerinhoud http://placeholder.com/OC/hoig/leerinhoud-detail.php?id=1&leerinhoud=the-slughttp://placeholder.com/OC/hoig/leerinhoud/1/the-slug
...

의 .htaccess에

TL; DR : 어떻게 얻을 수있는 kickass 깨끗한 SEO 친화적 인 URL의 내 모든 페이지에 대한?

미리 감사드립니다.

답변

1

당신은이 개 솔루션을 가지고

먼저 규칙이

RewriteCond %{THE_REQUEST} /leerinhoud-detail\.php\?id=([^\s&]+)&leerinhoud=([^\s&]+) [NC] 
RewriteRule^leerinhoud/%1/%2? [R=302,L] 
RewriteRule ^leerinhoud/([^/]+)/([^/]+)/?$ leerinhoud-detail.php?id=$1&leerinhoud=$2 [L,NC,QSA] 

RewriteCond %{THE_REQUEST} /leerinhoud\.php [NC] 
RewriteRule^leerinhoud [R=302,L] 
RewriteRule leerinhoud leerinhoud.php [L,NC,QSA] 

둘째/leerinhoud (이 방법에 대한 패턴의 끝을 시작 넣어하는 것입니다 주문 교환하는 것입니다, 규칙의 순서는 중요하지 않습니다 더 이상)

RewriteCond %{THE_REQUEST} /leerinhoud\.php [NC] 
RewriteRule^leerinhoud [R=302,L] 
RewriteRule ^leerinhoud$ leerinhoud.php [L,NC,QSA] 

RewriteCond %{THE_REQUEST} /leerinhoud-detail\.php\?id=([^\s&]+)&leerinhoud=([^\s&]+) [NC] 
RewriteRule^leerinhoud/%1/%2? [R=302,L] 
RewriteRule ^leerinhoud/([^/]+)/([^/]+)/?$ leerinhoud-detail.php?id=$1&leerinhoud=$2 [L,NC,QSA] 

결론
Understan d RewriteRule leerinhoud leerinhoud.php [L,NC,QSA]RewriteRule ^leerinhoud$ leerinhoud.php [L,NC,QSA]은 같지 않습니다. 첫 번째 것은 leerinhoud이 (leerinhoud.php 또는 leerinhoud/something/slug과 같은) URL의 어디서나 표시 될 수 있기 때문에 항상 일치합니다.

참고 : 확장

Options -MultiViews 
+0

화려한없이 파일 이름을 다시 쓸 때 당신은 또한 MultiViews 옵션을 해제 할 수 있습니다! 정확히 내가 필요한 대답. 하지만,'MultiViews' 라인을 조금 설명해 주시겠습니까? 또한'R = 302'은 어떨까요? –

+0

'R = 302'는 일시적인 리디렉션입니다. 지금 당신의 코드가 작동 중일 때 영구적 인 리디렉션이 더 좋을 것입니다 (대신'R = 301'을 사용하십시오). 'MultiViews '에 관해서는, 그것은 컨텐츠 협상을위한 아파치 옵션이다. 존재하지 않는'/ foo'를 요청하고'foo.html '이라는 파일을 가지고 있다면'MultiViews'가 활성화되어 있다면 자동으로'foo.html'을 제공합니다. 그래서 확장 기능을 사용하지 않고 동일한 파일 이름을 사용하는 규칙 때문에 비활성화하는 것이 좋습니다. 더 많은 정보는 여기 : http://httpd.apache.org/docs/2.0/en/content-negotiation.html –

+1

위대한,이 완벽한 답변 주셔서 감사합니다 저스틴, 나는 결국 뭔가를 배울 수 있습니다 :) –