【问题标题】:URL-Rewrite in .htaccess RegEx.htaccess RegEx 中的 URL 重写
【发布时间】:2017-02-09 00:04:58
【问题描述】:

我想知道如何设置正则表达式来重写特定的 url,所以看起来请求的站点位于特定的文件夹中。我尝试使用手动 RewriteRules,但在重写名称中使用“/”时遇到问题...... (这是问题 #2:为什么我不能在重写的名称中使用“/”?)

我的文件名为:

ga_filename.php 或者 gt_filename.php

这些文件实际上都在一个目录中。

当前的 url 类似于

www.whatever.de/index.php?content=ga_filename.php

所以对应于我的文件(ga 或 gt)的 2 个起始字母,我希望 url 看起来像

www.whatever.de/ga/filename 或者 www.whatever.de/gt/文件名

我需要的是一个正则表达式,它读取“=”之后的前 2 个字母(来自 ?content=),创建相应的文件夹,并在“_”之后获取文件名的其余部分(来自 ga_filename.php)删除 .php 作为 url 中显示的文件名。

我希望我已经解释了这个可以理解的.. 非常感谢任何帮助。

【问题讨论】:

    标签: regex .htaccess url-rewriting


    【解决方案1】:

    您可以在站点根目录 .htaccess 中使用这两条规则:

    RewriteEngine On
    
    # external redirect from actual URL to pretty one
    RewriteCond %{THE_REQUEST} \s/(?:index\.php)?\?content=(\w{2})_([^\s&.]+)\.php [NC]
    RewriteRule ^ /%1/%2? [R=301,L,NE]
    
    # internal forward from pretty URL to actual one
    RewriteRule ^(\w{2})/([^/.]+)/?$ index.php?content=$1_$2.php [L,QSA]
    

    【讨论】:

    • 这似乎不起作用。我忘了提到,这些文件包含在 index.php 中,所以实际的 url 就像 www.whatever.de/index.php?content=ga_filename.php 我编辑了我的问题。
    • 这实际上只显示了我的 index.php,但没有任何包含,并且所有格式化的 css 和图像都丢失了
    • image/css/js 问题是由于您使用了相对路径。您可以在页面 HTML 的 <head> 部分下方添加此代码:<base href="/" /> 进行修复。
    【解决方案2】:

    试试下面的规则,

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([\w-]+)/([\w-]+)$ index.php?content=$1_$2.php [L]
    

    【讨论】:

    • 这似乎不起作用。我忘了提到,这些文件包含在 index.php 中,所以实际的 url 就像 www.whatever.de/index.php?content=ga_filename.php 我编辑了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2011-03-19
    • 2022-01-18
    • 2014-04-27
    相关资源
    最近更新 更多