Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 重写URL中的GET变量_.htaccess_Mod Rewrite_Url Rewriting_Rewrite - Fatal编程技术网

.htaccess 重写URL中的GET变量

.htaccess 重写URL中的GET变量,.htaccess,mod-rewrite,url-rewriting,rewrite,.htaccess,Mod Rewrite,Url Rewriting,Rewrite,我正在使用WordPress的永久链接结构%category%/%postname%/和以下htaccess: <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]

我正在使用WordPress的永久链接结构%category%/%postname%/和以下htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^(.+)/gallery/$ $1/?m=gallery [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

考虑您提供的URL示例(
http://www.example.com/category/postname/gallery/
=>
http://www.example.com/category/postname/?m=gallery
)您需要这样的线路:

RewriteRule ^(.+)/gallery/$ $1/?m=gallery [QSA]
  • 添加了缺少的斜杠
    /

  • 添加了
    [QSA]
    标志(实际上可能并不需要)

  • 您需要将此规则放在顶部的某个位置:在这一行之后,例如:
    RewriteRule^index\.php$-[L]


    显然,您可以确保WordPress将生成此类URL:
    http://www.example.com/category/postname/gallery/

    这一切都是有道理的,但它似乎不起作用。你认为WordPress正在做什么吗?一个接一个地尝试:1)将
    QSA
    添加到最后一条规则:
    RewriteRule/index.php[QSA,L]
    2)在答案3)的规则中添加
    L
    标志,如果仍然没有。。您可以完全控制Apache(可以编辑配置文件),然后启用重写调试(
    rewriteloglevel9
    ),重新启动httpd并查看重写日志(在尝试访问此类URL之后)——它应该会告诉您哪里出了问题。