【问题标题】:How to swap "index.php?" with "index.php@" in URL strings via htaccess mod_rewrite如何交换“index.php”?通过 htaccess mod_rewrite 在 URL 字符串中使用“index.php@”
【发布时间】:2012-07-13 05:22:07
【问题描述】:

我有一个原始动态网站的静态副本。原始网站的网址是这样的:

http://www.example.com/index.php?module=prodreviews&func=showcontent&id=728

但是,由于我现在拥有网站的静态副本,因此所有网址都有 @ 而不是 ?和一个 .htm 扩展名。

所以当前的url格式:http://www.example.com/index.php@module=prodreviews&func=showcontent&id=728.htm

哪些 mod_rewrite 规则可以将对旧 URL 结构(URL 中的“?”且没有 .htm 扩展名)的任何请求重定向到新的 URL 格式?我基本上希望通过旧链接访问我网站的任何人都将被带到正确的页面,即使 URL 格式已更改。

我一直在写一些规则,但没有骰子。

这是我目前所拥有的,但这只会在任何 URL 上自动添加一个 .htm 扩展名。我仍然需要替换任何带有“?”的 URL 请求。在“php”后面加上“@”:

Options +FollowSymlinks Options +Indexes RewriteEngine On RewriteBase /
# add .html file extension 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.htm -f 
RewriteRule ^(.+)$ $1.htm [L]

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    您需要将查询字符串作为重写规则目标的一部分:

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME}@%{QUERY_STRING}\.htm -f
    RewriteCond %{QUERY_STRING} ^(.*)$  
    RewriteRule ^(.*)$ /$1@%1.htm? [L]
    

    【讨论】:

    • 一直在测试它——它确实适用于大多数情况。但还有一个补充:对于某些查询,我需要忽略似乎有点弄乱链接结构的大写字母。例如,如果这是一个 URL 链接,有人跟随它去我页面上的某个站点,我将如何忽略查询中的大写字母?所以这个mytestcom/… 需要变成mytest.com/…
    • 为了转换成小写,你需要访问你的服务器的配置或虚拟主机配置并使用RewriteMap,见:chrisabernethy.com/force-lower-case-urls-with-mod_rewrite
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2015-01-20
    相关资源
    最近更新 更多