Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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

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
Apache .htaccess重定向-无[R]标志的无限循环_Apache_.htaccess_Redirect - Fatal编程技术网

Apache .htaccess重定向-无[R]标志的无限循环

Apache .htaccess重定向-无[R]标志的无限循环,apache,.htaccess,redirect,Apache,.htaccess,Redirect,我试图在我的网站上使用漂亮的URL。我想重定向 example.com/page-title/至example.com/?q=页面标题 以下.htaccess代码工作正常,但由于[R]标志,它执行HTTP重定向: RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(.+)/*$ https://www.example.com/?q=$1 [L,

我试图在我的网站上使用漂亮的URL。我想重定向

example.com/page-title/至example.com/?q=页面标题

以下.htaccess代码工作正常,但由于[R]标志,它执行HTTP重定向:

RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^(.+)/*$ https://www.example.com/?q=$1 [L,R]
显然我想做一个内部重定向,但是当我删除[R]标志时,它会进入一个重定向循环

  • 为什么有了[R]标志,它就不会循环,没有它,它就会循环
  • 如果没有[R]标志,如何避免循环

  • 问题似乎是您的目标中有
    http://
    。即使没有
    R
    标志,如果Apache看到目标中有
    http://
    https://
    的完整URL,那么它将使用
    R=302
    执行完全重定向

    您可以使用以下规则:

    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteRule ^(.+)$ /?q=$1 [L,QSA]
    

    将您的规则更改为:
    RewriteRule^(+)$/?q=$1[L,QSA]
    并完全清除缓存。是的,我认为问题在于包含了整个URL。没有它,Apache无法检测和禁用循环。如果您愿意,请随时发布答案,以便我选择正确的答案。