繁体   English   中英

如何? 虚荣网址并忽略带有.htaccess的.PHP扩展名

[英]How-to? Vanity URL & ignore .PHP extension with .htaccess

我的以下.htaccess正常运行:

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

这将允许我编写如下网址:

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

但是,如果我希望有一条附加规则来避免为现有文件编写.php扩展名,该怎么办?

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

我尝试将其添加到我的curr htaccess中(但不起作用):

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

换句话说,我想使用虚荣网址,而忽略同一.htaccess中的.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]

这是有序的问题。 RewriteRules按照在.htaccess中记录的顺序应用
看到您想了解的有关Mod_Rewrite规则的所有内容,但不敢问吗?

只需将您的新块添加为第一个重写语句,添加一个[LAST]标志,它就可以工作。

该规则无条件地起作用(不受任何RewriteCond的保护),因此应始终是所有RewriteRules中的最后一个:

 RewriteRule ^(.*)$ ...

(并且所有前面的RewriteRules最好都带有一个[L]标志。您在这里有一些解决方法。)

对我来说,这段代码有效:

在“ / etc / apache2 / sites-available / default ”或“ httpd.conf ”中

您必须(至少)在默认目录中具有这些选项

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

或在特定于站点的站点目录中

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

并在网站目录中创建或编辑“ .htacces ”(例如“ /var/www/my-site/.htaccess”),并添加以下代码:

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM