【问题标题】:cant figure out mod_rewrite for php query string =/无法找出 php 查询字符串的 mod_rewrite =/
【发布时间】:2013-09-01 02:45:24
【问题描述】:

这是我的网站

http://www.coolcodez.net/ios/nicucalc

请注意,当您点击导航上的页面时,您会看到类似

的网址

http://www.coolcodez.net/ios/nicucalc/index.php?page=features

我在我的 nicucalc 目录中放置了一个 .htaccess 文件。我希望网址看起来像这样

http://www.coolcodez.net/ios/nicucalc/features

更好的是

http://www.coolcodez.net/nicucalc/features

这是我的 htaccess 文件。它永远无法正常工作..

RewriteEngine on
RewriteCond %{QUERY_STRING} ^page=(.*)$
RewriteRule ^index\.php$ /%1/? [R=301,L]

我做错了什么。请解释一下

另请注意:此文件夹位于 wordpress 安装文件夹内。不确定那个 htaccess 文件是否会以某种方式影响我的

【问题讨论】:

    标签: php .htaccess mod-rewrite query-string


    【解决方案1】:

    您的规则将index.php 的请求重定向到/features/(或任何“页面”)。这本身很好,但您需要在内部将其重写为 back 到 index.php。因此,您需要 2 条规则,一条用于重定向(匹配请求),一条用于内部重写(匹配 URI):

    RewriteEngine On
    RewriteBase /ios/nicucalc/
    
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /ios/nicucalc/index\.php\?page=([^&\ ]+)&?([^\ ]*)
    RewriteRule ^ /ios/nicucalc/%1?%2 [L,R=301]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
    

    第一个规则与请求匹配,如下所示:

    GET /ios/nicucalc/index.php?page=features HTTP/1.1
    

    使用%1 在规则中捕获和反向引用“特征”。第二条规则首先检查请求是否指向现有文件或目录。如果没有,则捕获 URI,然后将其重写为 index.php,并通过“page”参数将 URI 传递给脚本。

    【讨论】:

    • 这似乎不起作用。我在我的 htaccess 文件中实现了这个。您现在可以尝试访问网站上的网址
    • @hamobi 这些规则应该在/ios/nicucalc/的htaccess文件中
    • @hamobi 抱歉,我在-f-d 前面漏掉了一些!
    • 现在可以工作了。我会接受你的回答,但如果你能给出详细的解释那就太好了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 2014-07-27
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多