ウェブサイトは、ファイルにアクセスできないウェブホストで実行されてい.htaccess
ます。ただし、ユーザーフレンドリーなURLのURL書き換えを行いたい。
例:元のURL
www.example.com/file?q=name
予想されるURL
www.example.com/file/name
ウェブサイトは、ファイルにアクセスできないウェブホストで実行されてい.htaccess
ます。ただし、ユーザーフレンドリーなURLのURL書き換えを行いたい。
例:元のURL
www.example.com/file?q=name
予想されるURL
www.example.com/file/name
他の人が言ったように、のようなリンクを使用して/index.php/nice/looking/url
ください。
URLの途中にある「index.php」は少し奇妙に見えるかもしれませんが、.htaccessなしで見栄えを良くすることはできないと思います
それ以外の場合は、URLを/index.phpにリダイレクトするようにホスティング業者に依頼して、URLを使用せずにURLの書き換えを処理できるようにすることができ/index.php
ます。
次に、正規表現の一致を使用して、含めるファイルを検出できます。
preg_match('@[/]{1}([a-zA-Z0-9]+)@', $_SERVER["PATH_INFO"], $matches)
($ matchesには、配列内のURLのすべての「部分」が含まれます)
ファイルを含める際は注意してください。ホワイトリストを使用して、内部ファイルを誰もロードできないようにしてください。
Alix Axelが提案したように、
www.example.com/index.php/file/name
次に、を使用$_SERVER['REQUEST_URI']
してURLを処理します。
最善の策は、次のようなURLを使用することです。
www.example.com/index.php/file/name
ただし、PHPコードを書き直す必要があります。
Apacheサーバーがあり、AcceptPathInfoが有効になっている場合は、作成したURLを使用できます。のリクエストは、 ifが通常のファイルである場合のPATH_INFO値で/file/name
自動的に書き換えられます。/file
/name
/file
これは、Apache構成(httpd.confまたはapache2.conf)の言語/コンテンツネゴシエーションとリライトルールを使用するだけで可能です。.htaccess
ファイルの使用は必要ありません。
apache2.confファイル(またはhttpd.conf)に、Multiviews
ディレクティブ、MultiviewsMatch
ディレクティブ、および書き換えルールを追加します。
<Directory /var/www/html>
Options Indexes FollowSymLinks Multiviews
AllowOverride None
Require all granted
RewriteEngine On
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]
<Files "*.php">
MultiviewsMatch Any
</Files>
</Directory>
次に、ファイルを保存してApacheを再起動しますsudo systemctl restart apache2
後でhttpd.confでディレクティブを指定する場合は、サイトごとOptions
にディレクティブを繰り返す必要があります。Multiviews
<Directory /var/www/html/chocolate.com/>
Options FollowSymLinks Multiviews
AllowOverride All
Require all granted
</Directory>
<Directory /var/www/html/vanilla.com/>
Options FollowSymLinks Multiviews
AllowOverride All
Require all granted
</Directory>
すでに複数の言語でサービスを提供している場合、これはコンテンツネゴシエーションに悪影響を及ぼしません。たとえば、example.com/home.phpを次のように置き換えます
home.en.php home.fr.php home.de.php
次に、apache2.confで:
AddLanguage fr .fr
AddLanguage de .de
AddLanguage en .en
LanguagePriority fr de en
ForceLanguagePriority Fallback
あなたの言語はまだ交渉されますが、php拡張子はURLに表示されません。
または、index.phpファイルにルーティングスイッチを作成できます。
$request = $_SERVER['REQUEST_URI'];
switch ($request) {
case '/file' :
require __DIR__ . '/file';
break;
case '' :
require __DIR__ . '/file';
break;
case '/file/name' :
require __DIR__ . '/file?q=name';
break;
default:
http_response_code(404);
require __DIR__ . '/404.php';
break;
}
これを試して
www.example.com/file?q=name
に
www.example.com/name
(より良いwww.example.com/file/name
)
プロジェクトのルートフォルダからを開き、.htaccess
このコードを追加します
Options +FollowSymLinks
RewriteEngine On
RewriteRule \.(js|css|jpe?g|png|gif)$ - [L]
RewriteRule "^([ \w-]+)/?$" /file?q=$1 [L,QSA]