Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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
将类似/xyz的URL重定向到/index.php?goto=xyz_Php_Apache_.htaccess_Redirect - Fatal编程技术网

将类似/xyz的URL重定向到/index.php?goto=xyz

将类似/xyz的URL重定向到/index.php?goto=xyz,php,apache,.htaccess,redirect,Php,Apache,.htaccess,Redirect,我正在尝试从URL重写请求,如: www.domain.com/xyz 到 www.domain.com/index.php?goto=xyz 计划是自己在index.php中处理请求。如果URL保持www.domain.com/xyz,那就太好了,如果确实有一个名为xyz的文件夹,那么不重定向也太好了 我试过这个: RewriteRule^/(.*)$/index.php?goto=$1[R=301,NC,L] 但这不会保留URL,也不会检查是否已经存在文件夹xyz,最重要的是它总是转到ind

我正在尝试从URL重写请求,如:

www.domain.com/xyz

www.domain.com/index.php?goto=xyz

计划是自己在index.php中处理请求。如果URL保持
www.domain.com/xyz
,那就太好了,如果确实有一个名为
xyz
的文件夹,那么不重定向也太好了

我试过这个:

RewriteRule^/(.*)$/index.php?goto=$1[R=301,NC,L]

但这不会保留URL,也不会检查是否已经存在文件夹xyz,最重要的是它总是转到index.php?goto=index.php


安迪的帮助将不胜感激

您需要检查规则中是否存在文件和目录。将此规则保留在root.htaccess中:

RewriteEngine On

RewriteRule ^index\.php$ - [L,NC]

# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php?goto=$1 [QSA,L]

非常感谢,到目前为止效果很好!还有一个小问题。如果我请求一个像/test这样的URL,并且test是一个真实的文件夹,它会将我重定向到index.php?goto=index.php,而不是转到那个特定的文件夹。这些规则不会发生这种情况。清除浏览器缓存并重试。在我执行此操作后不久,我遇到了一个PHP致命错误:允许的内存大小为262144字节。这次重写是否产生了副作用?没有重写规则与PHP错误无关。查看php.ini以分配更多内存,否则可能会出现一些php代码问题。