2016-11-08 1 views
0

.htaccess 파일에 많은 스크립트를 넣었고, 내가 원하는 방식대로 정확하게 작업 한 것을 기록했다..htaccess URL에서 .php 확장자를 제거하지 말 것.

예를 들어, htdocs 폴더에 test.php라는 파일이 있고 localhost/test.php에 갔다면 브라우저에서 localhost/test로 파일을 다시 작성하고 싶습니다.

이 작업을 수행하는 2 개의 .htaccess 파일을 발견했는데 아래에 그 문제점을 설명했지만 양식을 사용하여 MYSQL 데이터베이스에 데이터를 삽입 할 때마다 빈 필드가 항상 생깁니다.

이이 그때 어제 다음 시간 및 시간을 검색 한 후 마법처럼 정확하게 작동 일부 스크립트를 발견 한

# Turn on the rewrite engine 
RewriteEngine on 
# If the request doesn't end in .php (Case insensitive) continue processing rules 
RewriteCond %{REQUEST_URI} !\.php$ [NC] 
# If the request doesn't end in a slash continue processing the rules 
RewriteCond %{REQUEST_URI} [^/]$ 
# Rewrite the request with a .php extension. L means this is the 'Last' rule 
RewriteRule ^(.*)$ $1.php [L] 

(가) 두 번째 난에 갔다 첫 번째 일

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

## hide .php extension 
# To externally redirect /dir/foo.php to /dir/foo 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] 
RewriteRule^%1 [R,L,NC] 

## To internally redirect /dir/foo to /dir/foo.php 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule^%{REQUEST_URI}.php [L] 

입니다 샤워가 돌아 왔고 그들은 일하지 않았다. (이전 .htaccess 파일을 삭제하고 새 파일을 만들고, mysql과 apache를 다시 시작하고, 브라우저 데이터를 지우고, .htaccess가 여전히 작동하지 않을 것입니다.) 그리고 나는 샤워하기 전에 내가 원하는 방법을 사용했습니다.

는 이러한 2 지금은 경우에만 작동 (아니, 난이 동시에 htaccess로 파일에 모두 넣지 않았다) 그래서

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
#RewriteRule ^([^\.]+)$ $1.html [NC,L] 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

두 번째

# Options is required by Many Hosting 
Options +MultiViews 

RewriteEngine on 

# For .php & .html URL's: 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 
RewriteRule ^([^\.]+)$ $1.html [NC,L] 

을하기 전에 일 I 수동으로 URL에서 .php를 제거하지만 그렇게하고 싶지 않거나 .php 확장명을 가진 php 문서의 모든 링크를 수동으로 변경하고 싶지 않고 둘 중 하나를 사용하고 싶었습니다. 양식을 사용하여 MYSQL에 데이터를 삽입 할 때 실제로 데이터가 나타나고 필드가 b가 아니기 때문에 여윈.

localhost/test.php가 슬래시를 추가하여 로컬 호스트/test.php가되었지만 이제는 작동하지 않지만 더 이상 작동하지 않지만 양식을 사용하여 데이터를 삽입하면 MYSQL 데이터베이스에 필드도 비어 있습니다.

# Apache Rewrite Rules 
<IfModule mod_rewrite.c> 
    Options +FollowSymLinks 
    RewriteEngine On 
    RewriteBase/

# Add trailing slash to url 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$ 
    RewriteRule ^(.*)$ $1/ [R=301,L] 

# Remove .php-extension from url 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME}\.php -f 
    RewriteRule ^([^\.]+)/$ $1.php 

# End of Apache Rewrite Rules 

나는 내가 발견하고 그들이하기로했다 정확히 어떻게 일을하는 사람의 메모를했지만 지금은 작동하지 않는, 사람이 이유를 알고 않습니다 말했듯이? 또는 내가 원하는 것을 정확히 수행하기 위해 조정할 수있는 방법은 무엇입니까? 나는 말 그대로 과거의 하루를 보냈다. Btw Windows 7에서 XAMPP를 사용하고 있습니다.

+0

TLDR이지만'RewriteRule's의'QSA' 플래그를 찾고 있습니다 같이 점등 소리. – arkascha

답변

0

다시 작성할 때 전송 된 URL은 스크립트를 호출하는 데 사용 된 URL이 아니지만 여전히 원본에 액세스 할 수 있습니다. index.php에서 ?$_SERVER['REQUEST_URI'] 폭발, 첫 번째 항목은 경로 (있는 경우) 두 번째로 parse_str($exploded[1], $_GET);

+0

이봐, 이거 좀 더 설명 할 수 있니? 나는 꽤 이해하지 못한다. –

+0

다시 쓰기에서 호출되는 PHP 스크립트에서 원래의 손상되지 않은'$ _GET' 변수를 얻는 방법이다. 그것은'index.php' 일 필요는 없으며, 각 페이지의 PHP 파일이 포함하는 include에서 이것을 할 수 있습니다. – Walf

관련 문제