.htaccess URL重写:file.php?param = val - >删除' file.php?param ='

时间:2014-07-28 00:26:15

标签: regex apache .htaccess mod-rewrite url-rewriting

刚刚解决了一个问题校对我的帖子,太棒了! :P

目前我有这段代码:

# To externally redirect /file.php?page=cat/subcat/page to /cat/subcat/page
  RewriteCond %{THE_REQUEST} file.php?page=(.*) [NC]
  RewriteRule ^ %1 [R=301,L]

# To internally forward /cat/subcat/page to /file.php?page=cat/subcat/page
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*?)/?$ file.php?page=$1 [L]

首先,我希望它在语法上是正确/有效的...我在正则表达式中吮吸!


现在,访问:

/猫/ SUBCAT /页

正常工作


但是,如果我访问

/file.php?page=cat/subcat/page

页面不会重定向到cat / subcat / page。


内部/外部重定向,正则表达式和.htaccess整体混淆了我,所以我不确定我应该在哪里寻找问题。如果它意味着什么,htaccess和file.php文件都位于www.website.com/test/,而不是网站根目录。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

这是因为你的正则表达式在第一条规则中是错误的。

请尝试以下规则:

  RewriteEngine On

  # To externally redirect /file.php?page=cat/subcat/page to /cat/subcat/page
  RewriteCond %{THE_REQUEST} /file\.php\?page=([^&\s]+) [NC]
  RewriteRule ^ /%1? [R=301,L]

  # To internally forward /cat/subcat/page to /file.php?page=cat/subcat/page
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.+?)/?$ file.php?page=$1 [L,QSA]