web-dev-qa-db-ja.com

URLから.phpを削除します

Ubuntu 14.04LTS32ビット

ランプ

私はそれが古い質問であることを知っていますが..

表示されているURLから.phpが見つかった場合は、それを削除する必要があります。 /showthread.php?id=XX --->/showthread?id = XXで動作する必要があります

/page.php-> /pageで動作させることすらできません。私はこれらを試しました:

。htaccessで.php拡張子を削除

Apache mod_rewriteで.html拡張子を非表示にする方法

htaccessを使用してURLから.phpを削除します

。htaccessループを停止する方法

何もしません。他の.htaccessコードは正常に機能しますが。

一方

<?php 
phpinfo();

ロードされたモジュールのmod_rewriteを一覧表示します

そして

<?php
 if(!function_exists('Apache_get_modules') ){ phpinfo(); exit; }
 $res = 'Module Unavailable';
 if(in_array('mod_rewrite',Apache_get_modules())) 
 $res = 'Module Available';
?>
<html>
<head>
<body>
<p><?php echo Apache_get_version(),"</p><p>mod_rewrite $res"; ?></p>
</body>
</html>

Module Availableを返します

もっとたくさん試してみました

# 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
 </IfModule>

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php

これでさえ何の効果もありません:

RewriteRule ^page$ page.php [L]

Sudo service Apache2 restartは何も変更しません。

サーバーを再起動しても何も変わりません。

内部の他のコードをクリアしようとしましたが、変更はありませんでした。

ブラウザのキャッシュを100回クリアしました

私はそれが私を憎んでいるだけだと思い始めています。何が原因でしょうか?

13
Myst

助けてくれることを願っています。

それは私のために働いた。

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

# For LocalHost !.php
RewriteCond %{HTTP_Host} !=localhost
RewriteCond %{HTTP_Host} !=127.0.0.1
RewriteCond %{REMOTE_ADDR} !=127.0.0.1
RewriteCond %{REMOTE_ADDR} !=::1

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

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
10
Asif Raza

チェック このリンク

これは.htaccessを使用した答えです:

RewriteEngine On

# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]

# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php [L]

WAMPを使用してWindowsでテストし、動作しています。

5
Condorcho

これを試して、ファイルから.php拡張子を完全に削除し、無限ループを回避してください。

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [NC,L]

このコードはRoot/.htaccessで機能します。これをサブディレクトリのhtaccessファイルに配置する場合は、必ずRewriteBaseを変更してください。

2
Siddhesh
RewriteEngine on //replacement launch
RewriteCond %{REQUEST_FILENAME} !-d //If the requested object is not a folder
RewriteCond %{REQUEST_FILENAME}\.php -f //If the requested object to append the extension php - file
RewriteRule ^(.*)$ $1.php //make the change from concatenating .php
0
Endios

以下を試すことができます。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php$2 [L]
0
Peter Darmis

おそらくこれは重複している可能性がありますが、これを見てください:

RLから.htmlを削除する方法

ソリューションでは、hmtlphpに変更します

0
Jordan Cortes

.htaccessが処理されていると仮定すると、この非常に単純な.htaccessが機能するはずです。

RewriteEngine on
RewriteRule (.*) $1.php [END]

それが機能しない場合は、Apacheの構成に問題があります。最初にそれを調べる必要があります。

動作する場合は、RewriteRuleの前に次の行を追加して、他のファイルを提供できるようにします。

RewriteCond %{REQUEST_FILENAME} !-f

ENDフラグは、Apache2.3.9以降で使用できます。

0
Rei

私のApache設定で mod_negotiation を有効にすると、私のためにトリックが行われました:

コンテンツネゴシエーション、より正確にはコンテンツの選択は、利用可能ないくつかのドキュメントの1つから、クライアントの機能に最も一致するドキュメントを選択することです。

0
HWD

動作しています。このコードを試すことができます。

1。最初にメインディレクトリに.htaccessファイルを作成し、その後同じコードを貼り付けて、履歴とその動作をクリアします。

RewriteEngine on

RewriteCond $1 !^(index\.php|resources|robots\.txt)

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php/$1 [L,QSA] 
0
Saurabh Singh

わたしにはできる:

    #On rewrite
    RewriteEngine On

    # Allow any files or directories that exist to be displayed directly
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d

    # rewrite domain.com/username.php to username
    RewriteRule ^([A-Za-z0-9_-]+)/?$ $1.php [NC,L]
    RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9]+)/?$ $1/$2.php [NC,L]
    RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+)/?$ $1/$2/$3.php [NC,L]

その他:fbのようなソーシャルポータル用の私の書き換えファイルを見てください:

# allow only from ip range /8 /16 /24 /31
    #Order deny,allow
    #Deny from all
    #Allow from 89.230.0.0/16

    # On rewrite
    RewriteEngine On

    # [NC]- case-insensitive 
    # [L] - Last Rule , stop the rewriting process here 
    # [OR] = Or - If it matches this condition or the next 
    # [QSA] -   Append query string to rewriting url
    # [R] - redirect [R=301] move permanently, 302 - temporarily, 403 - Forbidden, 404 - Not Found,  410 - Gone

    # fix folder redirect images and css js/images/css/media
    RewriteRule ^.+?/((img|css|js|media|upload|posts)/.+)$ /$1 [L,R=301,NC]

    # Allow any files or directories that exist to be displayed directly
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d
    # does not work on IIS windows server url rewrite when importing
    # RewriteCond %[REQUEST_FILENAME] !-l

    # rewrite example.xx/index.php na example.xx/
    RewriteCond %{THE_REQUEST} ^.*/index\.php 
    RewriteRule ^(.*)index\.(php|html?)$ / [R=301,NC,L]


    #portfolio rewrite folder rewrite
    # RewriteRule ^([portfolio]+)/?$ /portfolio/index.php?id=$1 [NC,L]

    # pretty url example.xx/id/post/number 
    # rewrite domain.com/username like Twitter or facebook users
    RewriteRule ^([A-za-z0-9_-]+)/?$ index.php?username=$1 [NC,L]
    # domain.com/post/name
    RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9]+)/?$ profil.php?id=$1&menu=$2 [NC,L]
    # domain.com/cat/post/id
    RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9]+)/([0-9]+)/?$ profil.php?id=$1&menu=$2&page=$3 [NC,L]

    #RewriteRule ^([A-Za-z0-9_-]+)/(ustawienia)/?$ ustawienia.php?id=$1&menu=$2 [NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/(wpisy)/?$ profil0.php?id=$1&menu=$2 [QSA,NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/(fani)/?$ profil1.php?id=$1&menu=$2 [QSA,NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/(ogladasz)/?$ profil2.php?id=$1&menu=$2 [QSA,NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/(zdjecia)/?$ profil3.php?id=$1&menu=$2 [QSA,NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/(video)/?$ profil4.php?id=$1&menu=$2 [QSA,NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/(ulubione)/?$ profil5.php?id=$1&menu=$2 [QSA,NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/(wiadomosci)/?$ profil6.php?id=$1&menu=$2 [QSA,NC,L]
    #RewriteRule ^([A-za-z0-9_-]+)/?$ profil.php?id=$1 [NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9]+)/?$ profil.php?id=$1&menu=$2 [NC,L]
    #RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+)/?$ index.php?id=$1&dir=$2&post=$3 [NC,L]

    # Redirect all subdomains
    # RewriteCond %{HTTP_Host} ^(.*)\.breakermind\.com
    # RewriteRule ^(.*)$ http://breakermind.com/$1 [R=301,QSA,NC,L]

    # Redirect all subdomains
    # RewriteCond %{HTTP_Host} ^www.ns2.breakermind.com [NC]
    # RewriteRule ^(.*)$ http://breakermind.com/$1 [R=301,QSA,NC,L]

    # RewriteCond %{HTTP_Host} ^ns2.breakermind.com [NC]
    # RewriteRule ^(.*)$ http://breakermind.com/$1 [R=301,QSA,NC,L]

    # Redirect from www. to non-www (unhash if need)
    # RewriteCond %{HTTP_Host} ^www.breakermind.com [NC]
    # RewriteRule ^(.*)$ http://breakermind.com/$1 [R=301,QSA,NC,L]

    # Redirect from http:// to https:// (from no-ssl to ssl)
    #RewriteCond %{SERVER_PORT} 80
    #RewriteRule ^(.*)$ https://breakermind.com/$1 [R=301,QSA,NC,L]


    ErrorDocument 400 /er404.html
    ErrorDocument 401 /er404.html
    ErrorDocument 402 /er404.html
    ErrorDocument 403 /er403.html
    ErrorDocument 404 /er404.html
    ErrorDocument 500 /er404.html
    ErrorDocument 502 /er404.html
    ErrorDocument 504 /er404.html

    #RewriteEngin On
    #RewriteCond %[REQUEST_FILENAME] !-d
    #RewriteCond %[REQUEST_FILENAME] !-f
    #RewriteCond %[REQUEST_FILENAME] !-l
    #RewriteRule ^(.+)$ index.php?c=$1 [QSA,L]
    #
    #        \w = [A-Za-z0-9_]  \d = [0-9]

そしてここに私のブログシステムから:

        Options +FollowSymLinks
    RewriteEngine On

    RewriteCond %{THE_REQUEST} ^.*/index\.php 
    RewriteRule ^(.*)index\.(php|html?)$ / [R=301,NC,L]

    # category
    RewriteRule   ^category/?$ index.php?id=0&page=0  [NC,L]
    RewriteRule   ^category/([A-Za-z0-9]+)/?$ index.php?id=$1&page=0  [NC,L]
    RewriteRule   ^category/([A-Za-z0-9]+)/([0-9]+)/?$ index.php?id=$1&page=$2  [NC,L]
    RewriteRule   ^category/([A-Za-z0-9]+)/([0-9]+)/([A-Za-z0-9]+)/?$ index.php?id=$1&page=$2&title=$3  [NC,L]

    # autor
    RewriteRule   ^autor/?$ index.php?id=0&page=0  [NC,L]
    RewriteRule   ^autor/([A-Za-z0-9]+)/?$ index.php?id=$1&page=0  [NC,L]
    RewriteRule   ^autor/([A-Za-z0-9]+)/([0-9]+)/?$ index.php?id=$1&page=$2  [NC,L]

    # article, gallery, tags
    RewriteRule   ^article/([A-Za-z0-9]+)/?$ article.php?id=$1    [NC,L]
    RewriteRule   ^gallery/([A-Za-z0-9]+)/?$ gallery.php?id=$1    [NC,L]
    RewriteRule   ^tags/([A-Za-z0-9]+)/?$ tags.php?id=$1    [NC,L]
    RewriteRule   ^archive/([0-9]+)/([0-9]+)/?$ archive.php?year=$1&month=$2    [NC,L]

    # custom page rewrite
    RewriteRule   ^page/([A-Za-z0-9]+)/?$ page.php?id=$1    [NC,L]

    # fix folder redirect images and css js/images/css/media
    RewriteRule ^.+?/((admin|img|css|js|media|upload|posts)/.+)$ /blog/$1 [L,R=301,NC]

    # user or category user.php
    # RewriteRule   ^([A-Za-z0-9]+)/?$ index.php?user=$1  [NC,L]

    # example
    # RewriteRule ^([folder])/([category])/([A-Za-z0-9]+)/?$ index.php?id=$3&cat=$2 [NC,L]
0
user7601056

あなたは正しい方向に進んでいるかもしれません。ただし、.htaccessファイルが実行されていないようです。モジュールがアクティブ化されたからといって、特定の状況で使用できるとは限りません。

問題を解決するためのいくつかの手順があります:

  • まず、スペルをチェックします非常に注意深く。スペルが正しいことを確認します(先頭の。を含む)
  • ファイルのアクセス許可を確認してください。一部のサーバーでは、実行可能権限が必要になります。したがって、ファイルを755にchmodします。
  • それでも機能しない場合は、Apache構成(おそらくUbuntuの/etc/Apache2/Apache2.conf)に移動し、AllowOverrideのすべてのインスタンスを見つけます。 'none'に設定されている可能性があります。代わりにこれをAllowOverride allに変更してください。
  • 次に、sites-enabledに移動し、サイト構成を見つけて、そこにあるAllowOverrideフィールドを変更します。
  • Apacheサーバーを再起動し、大きなコーヒーでお祝いしましょう。

これらのいずれかで修正する必要があります。エラーが発生した場所を特定できるように、各ステップ間で試すことをお勧めします。原因を特定した後、必要に応じて、戻ってこれらのAllowOverridesの一部を制限することをお勧めします。

頑張ってください!

0
Terry