【问题标题】:.htaccess remove .php and add trailing slash.htaccess 删除 .php 并添加斜杠
【发布时间】:2014-03-04 18:15:31
【问题描述】:

我正在尝试从我的 URL 中删除 .php 并在末尾添加一个斜杠。我的 .php 删除工作正常,但我很难让尾部斜杠工作。

这是我目前得到的:

# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

## hide .php extension snippet

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

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

提前致谢!

【问题讨论】:

  • 请详细说明让斜杠工作。您在浏览器中请求什么 URL?它是如何处理的?您希望如何处理?

标签: php regex .htaccess mod-rewrite url-rewriting


【解决方案1】:

首先,代码和 cmets 看起来非常熟悉 :)

使用此代码:

RewriteEngine On
RewriteBase /

## hide .php extension snippet

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

# add a trailing slash    
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteRule . %{REQUEST_URI}/ [L,R=301]

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

【讨论】:

  • Anubhava 我想你不知道我怎样才能让 .php 到非 .php 重定向像 301 一样工作,对吗?目前它是一个 302,如果我们有任何指向 .php 版本 URL 的链接,它对于 SEO 来说并不理想。
  • 只需将第一条规则更改为具有此标志:[R=301,L] 并会处理 SEO。
  • 这很好用。但是,我遇到了一个问题,我使用 PHP 邮件程序的联系表单现在将 GET 视为请求方法而不是 POST。知道我的配置可能有什么问题吗?
  • 这些规则不能将POST 更改为GET。如果您使用的是POST,请尝试使用R=308 而不是R=301
【解决方案2】:

试试这个:

# Run PHP without filename extension
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php

# Return 404 if original request is *.php
RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php[? ].*$"
RewriteRule .* - [L,R=404]

【讨论】:

    猜你喜欢
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 2021-12-14
    相关资源
    最近更新 更多