【问题标题】:Rewriting URL from other than root folder with .htaccess使用 .htaccess 重写根文件夹以外的 URL
【发布时间】:2021-07-01 12:15:37
【问题描述】:

我正在尝试使用 .htaccess 将 URL 重写为漂亮的 URL。我尝试了很多方法,总是得到或错误 500 或什么都没有发生。我的文件夹树如下所示:

 root
    index.php
    .htaccess
    p
        .htaccess
        citati.php 
        ...

当有人去https://example.com/p/citati/Test-test 将其重写为https://example.com/p/citati?autor=Test-test 时,我要做的是从我的“p”目录中,这样我就可以在我的citati.php 文件中有$_GET["autor"]。我在“p”目录中有很多 .php 文件,所以这也是我在重写时需要担心的。 这是我的根目录下的 .htaccess

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
RewriteRule ^(.+)p/citati\/(.+)$ p/citati?autor=$1 [NC]

这就是我现在在“p”目录中的 .htaccess 文件:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [L,QSA]
RewriteRule ^p/citati\/(.+)$ p/citati?autor=$1 [NC]
</IfModule>

我是否可以从根 .htaccess 文件或“p”目录 .htaccess 实现这一点并不重要,我只是想以某种方式做到这一点。

【问题讨论】:

    标签: regex .htaccess


    【解决方案1】:

    根据您显示的示例,请确保您的根目录的 htaccess 规则文件如下。

    RewriteEngine ON
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
    

    对于您的p 目录/文件夹,具有该 htaccess 规则文件,如下所示。您需要使用与 root htaccess 相同的规则,您可以继承它。

    RewriteOptions InheritBefore
    RewriteEngine ON
    RewriteBase /p/
    
    RewriteCond %{THE_REQUEST} \s/(citati[^.]*)\.php\s [NC]
    RewriteRule ^ %1? [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/]*)/(.*)/?$ $1.php?autor=$2 [NC,L]
    

    【讨论】:

    • 谢谢,这可以工作,但是没有 php 扩展名也可以工作,因为在我的 p 目录中,我所有的文件现在又都有 .php 扩展名了?
    • @Martin,您能否在此处提及它适用于哪个 url?您希望它对哪个 url 起作用?这将使我更好地理解问题,谢谢。
    • 它像我想要的那样工作,例如它适用于 citati/Test 但我在 p 目录中的其他 .php 文件再次必须在浏览器控制台中具有 .php 扩展名(example.com/p/ o_nama.php 而不仅仅是 example.com/p/o_nama)。我在我的 p 文件夹中有这个规则,没有它,这很好,但我也需要它:RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [L,QSA]
    • @Martin,好的,我现在已经根据您的最后评论编辑了我的规则,请您检查一下并告诉我进展如何?请确保在测试 URL 之前清除浏览器缓存。
    • 它正在工作,非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 2014-02-19
    • 2015-04-22
    • 2023-03-26
    • 2017-07-16
    • 1970-01-01
    相关资源
    最近更新 更多