21

ウェブサイトは、ファイルにアクセスできないウェブホストで実行されてい.htaccessます。ただし、ユーザーフレンドリーなURLのURL書き換えを行いたい。

例:元のURL

www.example.com/file?q=name

予想されるURL

www.example.com/file/name
4

7 に答える 7

16

他の人が言ったように、のようなリンクを使用して/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のすべての「部分」が含まれます)

ファイルを含める際は注意してください。ホワイトリストを使用して、内部ファイルを誰もロードできないようにしてください。

于 2010-01-24T11:57:28.943 に答える
5

Alix Axelが提案したように、

www.example.com/index.php/file/name

次に、を使用$_SERVER['REQUEST_URI']してURLを処理します。

于 2010-01-24T11:23:40.740 に答える
4

最善の策は、次のようなURLを使用することです。

www.example.com/index.php/file/name

ただし、PHPコードを書き直す必要があります。

于 2010-01-24T11:06:21.187 に答える
3

Apacheサーバーがあり、AcceptPathInfoが有効になっている場合は、作成したURLを使用できます。のリクエストは、 ifが通常のファイルである場合のPATH_INFO値で/file/name自動的に書き換えられます。/file/name/file

于 2010-01-24T12:02:05.597 に答える
1

これは、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に表示されません。

于 2021-03-31T01:59:53.083 に答える
0

または、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;
}
于 2021-09-23T10:16:48.113 に答える
-1

これを試して

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]

これはあなたの問題を解決します。URLを書き換える方法の投稿を参照してください.htaccess

于 2017-01-13T08:21:59.787 に答える