【问题标题】:redirect and rewrite url using .htaccess使用 .htaccess 重定向和重写 url
【发布时间】:2017-06-16 18:41:54
【问题描述】:

最近我正在考虑通过重写和重定向 url 来制作一些对 seo 友好的 url。

我写的规则对于xyz.com/abc.php这样的这种类型的url工作正常,它自动转换为xyz.com/abc现在我需要这种类型的urlabc.com/study.php/abc/123的帮助,我想重定向到abc.com/study/abc/123

我的 .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]

编辑

现在工作正常,我改变了主意,我不想从所有文件中删除 .php 扩展名,而是专门从 2 个文件中删除 .php 扩展名,即 a.phpb.php

【问题讨论】:

    标签: php regex apache .htaccess mod-rewrite


    【解决方案1】:

    你可以调整你现有的规则来支持这个PATH_INFO,就像这样:

    # browser requests PHP
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\s/+(\S+?)\.php(/\S*)?\sHTTP [NC]
    RewriteRule ^ /%1%2 [L,R=301,NE]
    
    # check to see if the request is for a PHP file:
    RewriteCond %{DOCUMENT_ROOT}/$1.php -f
    RewriteRule ^/?(.+?)(/.*)?$ /$1.php$2 [L]
    

    【讨论】:

    • 如果只想从两个文件(即a.phpb.php)中删除.php 扩展名,而不是从所有文件中删除
    • 将第一条规则中的(\S+?) 和第二条规则中的(.+?) 替换为(a|b)
    • 如果我需要在 a.php 和 b.php 上再次应用相同的规则,但这次它们的位置在 c 目录中,如 /c/a.php and /c/b.php 而不是根目录 /,我尝试放置 .htaccess在该目录中,但它不起作用
    • 尝试最后一条规则为:RewriteRule ^/?(a|b)(/.*)?$ /c/$1.php$2 [L]
    猜你喜欢
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2015-07-28
    • 2016-09-28
    • 2013-01-27
    • 2011-01-27
    • 1970-01-01
    • 2014-02-19
    相关资源
    最近更新 更多