2017-12-29 63 views
0

현재 .htaccess (아래 포함)가 멋지게 작동합니다. 사용자가 content.php 페이지로 이동하여 데이터베이스에 저장된 페이지를 보여줍니다. 그러나 일부 페이지에는 하드 코드가 필요하므로 .php 확장자로 나열됩니다. 확장 기능을 제거하고 쿼리 문자열을 디렉토리로 보낼 수있는 다시 쓰기 규칙을 추가하는 방법이 있습니까?.htaccess 확장명과 쿼리 문자열을 제거하고 폴더 구조로 만들기 위해 다시 작성하지만 페이지가 존재하지 않으면 다른 페이지로 보내기

현재 예 : http://www.example.com/dashboard.php?ax=clients&do=save&miscthirdparam=doitnow

까지 : dashboard.php 페이지가 존재하지 않는 경우 http://www.example.com/dashboard/clients/save/doitnow/

그러나, 그럼 그냥 content.php로 보내 지금 데이터베이스에 표시 할 페이지가 있는지 확인해야합니까? (db에 페이지가없는 경우 오류 404가 표시됩니다.)

** 내 현재 htaccess로는 **

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^([a-zA-Z]*)/(.*)$ /content.php?url=$1/$2 [L] 
    Options +FollowSymLinks 
    RewriteEngine on 
</IfModule> 
<IfModule !mod_rewrite.c> 
    ErrorDocument 404 /content.php?err=404 
</IfModule> 

답변

0

당신은 RewriteCond backreference를 사용할 수 있습니다. 우리는 첫 번째 URL 경로를 추출하고 PHP 파일이 있는지 알아낼 수 있습니다. 예제를 통해 dashboard을 추출하고 %{DOCUMENT_ROOT}/dashboard.php 파일이 있는지 확인하십시오. 그렇다면 지정된 매개 변수로 URL을 다시 작성하십시오. 정규식 [^/]*은 슬래시 /을 제외한 모든 문자와 일치합니다.

RewriteCond %{REQUEST_URI} ^/([^/]*) 
RewriteCond %{DOCUMENT_ROOT}/%1.php -f 
RewriteRule ^([^/]*)(/([^/]*))?(/([^/]*))?(/([^/]*))? /$1.php?ax=$3&do=$5&miscthirdparam=$7 [L] 
+0

파일이 존재하지 않으면 content.php로 되돌아갑니다. 나는 그것을 다른 장소에 두려고했지만 어느 곳에서도 일하는 것 같지 않습니다. :) –

+0

바로 전에 첫 번째'RewriteCond'를 붙여 넣을 수 있습니다. – Ben

+0

www.example.com/dashboard/을 방문하려고하면 www.example.com/dashboard.php로 이동해야합니다. /content.php로 이동하고 페이지가 데이터베이스에 없기 때문에 404를 표시합니다. –