重定向/约.htaccess中的/about.php

时间:2013-05-04 14:06:42

标签: .htaccess mod-rewrite

首先,我知道有很多类似的问题,但是

  1. 他们似乎都不适合我
  2. 他们都没有真正解决我想要的问题
  3. 正如标题所示,我想要的是将没有.php扩展名的网址重定向到实际的.php文件 - 如果可能的话更改网址(我认为这只是由[R =处理] 301])。我尝试过的最新事情是:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^(.+)$ $1.php [R=301]
    

    这不起作用。我仍然无法使用/about.php访问/about。 (.htaccess规则本身工作正常但是)

    我理解RegEx很好,但是htaccess规则只是弄乱了我的头= [

    那我该怎么办?


    现在我知道你在想什么了

    其中一位你会这样说:“你为什么要这样做?只需完全摆脱扩展程序,然后通过/about/about/使用尾部斜杠访问您的网页。”

    我想这样做,看起来很不错。问题是搜索引擎优化 - 我假设我的网页排名将被湮灭,因为他们突然在不同的网址上。所以在你建议之前,建议我如何保持我的页面排名第一。

    我实际上在做的事实上是海报的网址缩短 - 人们记住mywebsite.com/aboutmywebsite.com/about.php更容易。

3 个答案:

答案 0 :(得分:1)

通过httpd.conf启用mod_rewrite和.htaccess,然后将此代码放在.htaccess目录下的DOCUMENT_ROOT中:

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

## 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 %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

请确保使用以下功能禁用MultiViews选项:Options -MultiViews

验证一切正常后,将R=302替换为R=301。在测试mod_rewrite规则时,请避免使用R=301(永久重定向)。

答案 1 :(得分:0)

请确保 Apache HTTP Server 上有 mod_rewrite 并尝试此操作:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)$ /$1.php [R]

但在检查重定向动态网址之前,请先清除缓存或使用其他浏览器,因为您之前使用的是[R=301]标记!有关更多信息。关于这一点,请访问:https://stackoverflow.com/a/15999177/2007055


你可以试试这个,但它和上一个代码完全相同:

RewriteEngine on

RewriteRule ^([a-zA-Z0-9_-]+)$ http://%{HTTP_HOST}/$1.php

当它工作时,尝试将这两个条件添加到重写规则之上:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)$ http://%{HTTP_HOST}/$1.php

如果上述任何代码无效,我认为您的 Apache HTTP Server 存在问题。

答案 2 :(得分:0)

这适合我。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [L,QSA]

如果您愿意,可以将其链接起来。

RewriteEngine On

# Remove trailing slashes.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=permanent,QSA]

# Redirect to HTML
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

# Redirect to PHP
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [L,QSA]

# Redirect to ASP
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.asp -f
RewriteRule ^(.+)$ $1.asp [L,QSA]