1

次の .htaccess が完全に機能しています。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
RewriteRule ^(.*)$ http://www.mysite.com/mypage.php?u=$1 [NC]

これにより、次のような URL を記述できるようになります。

http://www.mysite.com/peter  =>  http://www.mysite.com/mypage.php?u=peter

しかし、既存のファイルに .php 拡張子を記述しないようにする追加のルールが必要な場合はどうすればよいでしょうか?

http://www.mysite.com/contact   (contact.php exists on file)

これを現在の htaccess に追加しようとしました (ただし、機能しません):

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

つまり、同じ .htaccess でバニティ URL を使用して、.php 拡張子を無視したいと考えています。


解決しました!Ulrich Palha と Mario に感謝します (注文と LAST [L] フラグについて知りませんでした!

RewriteEngine on
# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://www.mysite.com/$1 [R=301,L]

# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://www.mysite.com/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
RewriteRule ^(.*)$ http://www.mysite.com/mypage.php?u=$1 [NC]
4

2 に答える 2

1

それは注文の問題です。RewriteRules は、.htaccess に記載されている順序で適用され
ます

[LAST]新しいブロックを最初の書き換えステートメントとして追加し、フラグを追加するだけで機能します。

このルールは無条件に機能する (RewriteCond によって保護されない) ため、常にすべての RewriteRules の最後にある必要があります。

 RewriteRule ^(.*)$ ...

(そして、先行するすべての RewriteRules は、できれば[L]フラグを運ぶ必要があります。ちょっとした回避策があります。)

于 2011-12-21T01:00:01.203 に答える
0

私にとって、このコードは機能します:

/etc/apache2/sites-available/default」または「httpd.conf」内

これらのオプションは (少なくとも) デフォルトのディレクトリにある必要があります

...
    <Directory />
        ...
        Options FollowSymLinks
        AllowOverride All
        ...
    </Directory>
...

またはサイト固有のサイト ディレクトリ

...
    <Directory "/var/www/my-site">
        ...
        Options FollowSymLinks
        AllowOverride All
        ...
    </Directory>
...

サイトのディレクトリ (「/var/www/my-site/.htaccess」など) で「 .htacces 」を作成または編集し、次のコードを追加します。

AddType application/x-httpd-php htm html php
AddHandler application/x-httpd-php .htm .html

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
于 2013-01-23T12:34:01.920 に答える