2

私のURL:http://localhost/test.php

私は使っている:

.htaccess:

RewriteEngine On 
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

PHP:

$url = $_GET['url'];
echo var_dump($url);

しかし、$url に対して得られるのは次のとおりです。NULL NULL NULL NULL NULL NULL

4

2 に答える 2

6

編集:リダイレクトと書き換えの両方を処理するように調整されました。

RewriteEngine On 
RewriteBase /

# Redirect .php URLs to rewritten URLs
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)\.php$ $1 [L,QSA,R=301]

# Rewrite URLs for processing by router (index.php)
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L,NC]

RewriteCond %{REQUEST_FILENAME} !-dURL が一致する場合にディレクトリへのアクセスが試行されるため、条件を除外する必要があります。URL の書き換えを行う場合は、おそらく望ましくありません。

index.php

$url = isset($_GET['url']) ? $_GET['url'] : null;
var_dump($url);
于 2013-05-15T01:42:01.903 に答える
2

将来のユーザーのためにこれをどこかに残したかっただけです。これにより、HTML と PHP の両方の拡張機能が URL から削除されます。

#example.com/page will display the contents of example.com/page.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

#301 from example.com/page.html to example.com/page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

## don't touch /forum URIs
RewriteRule ^forums/ - [L,NC]

## hide .php extension snippet

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

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
于 2013-09-06T22:00:35.050 に答える