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
Apache 我们可以对内部路径使用重写规则吗?_Apache_Mod Rewrite - Fatal编程技术网

Apache 我们可以对内部路径使用重写规则吗?

Apache 我们可以对内部路径使用重写规则吗?,apache,mod-rewrite,Apache,Mod Rewrite,我一直看到重写规则用于公共URL路径,但我们也可以将URL映射到内部路径吗 例如,要将所有链接重定向到my_page.php,允许这样做吗 RewriteRule .* /home/yccaucom/public_html/my_page.php [last,noescape] 无法重定向到不在域根目录中的文件夹或文件 假定您的根文件夹是: /home/yccaucom/public_html/ 您只能重定向到public\u html中的内容,例如public\u html/css或pub

我一直看到重写规则用于公共URL路径,但我们也可以将URL映射到内部路径吗

例如,要将所有链接重定向到my_page.php,允许这样做吗

RewriteRule .* /home/yccaucom/public_html/my_page.php [last,noescape]

无法重定向到不在域根目录中的文件夹或文件

假定您的根文件夹是:

/home/yccaucom/public_html/
您只能重定向到
public\u html
中的内容,例如
public\u html/css
public\u html/some\u folder
,您还可以创建指向内部文件夹或文件的符号链接,它也应该可以工作

根据您的规则,它将如下所示:

RewriteCond %{REQUEST_URI} !^/my_page.php$ [NC]
RewriteRule ^ /my_page.php [L,NE]
您希望条件避免陷入无限循环

或者,您可以使用以下2个条件检查现有的文件/文件夹:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
基本上它说,如果文件或文件夹不存在重定向

如果您尝试按原样使用规则,它将尝试重定向到:

/home/yccaucom/public_html/home/yccaucom/public_html/my_page.php
但是,它很可能不会失败,因为您没有任何验证来停止循环,所以它会给您一条失败消息,告诉您重定向太多或太多

更深入地看一下规则,会发生以下情况:

10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe85288af18/initial] (3) [perdir /home/account/public_html/] strip per-dir prefix: /home/account/public_html/asdasdas2 -> asdasdas2
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe85288af18/initial] (3) [perdir /home/account/public_html/] applying pattern '.*' to uri 'asdasdas2'
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe85288af18/initial] (2) [perdir /home/account/public_html/] rewrite 'asdasdas2' -> '/home/account/public_html/edit.php'
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe85288af18/initial] (2) [perdir /home/account/public_html/] trying to replace prefix /home/account/public_html/ with /
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe85288af18/initial] (5) strip matching prefix: /home/account/public_html/edit.php -> edit.php
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe85288af18/initial] (4) add subst prefix: edit.php -> /edit.php
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe85288af18/initial] (1) [perdir /home/account/public_html/] internal redirect with /edit.php [INTERNAL REDIRECT]
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe852858798/initial/redir#1] (3) [perdir /home/account/public_html/] strip per-dir prefix: /home/account/public_html/edit.php -> edit.php
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe852858798/initial/redir#1] (3) [perdir /home/account/public_html/] applying pattern '.*' to uri 'edit.php'
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe852858798/initial/redir#1] (2) [perdir /home/account/public_html/] rewrite 'edit.php' -> '/home/account/public_html/edit.php'
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe852858798/initial/redir#1] (1) [perdir /home/account/public_html/] initial URL equal rewritten URL: /home/account/public_html/edit.php [IGNORING REWRITE]

无法重定向到不在域根目录中的文件夹或文件

假定您的根文件夹是:

/home/yccaucom/public_html/
您只能重定向到
public\u html
中的内容,例如
public\u html/css
public\u html/some\u folder
,您还可以创建指向内部文件夹或文件的符号链接,它也应该可以工作

根据您的规则,它将如下所示:

RewriteCond %{REQUEST_URI} !^/my_page.php$ [NC]
RewriteRule ^ /my_page.php [L,NE]
您希望条件避免陷入无限循环

或者,您可以使用以下2个条件检查现有的文件/文件夹:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
基本上它说,如果文件或文件夹不存在重定向

如果您尝试按原样使用规则,它将尝试重定向到:

/home/yccaucom/public_html/home/yccaucom/public_html/my_page.php
但是,它很可能不会失败,因为您没有任何验证来停止循环,所以它会给您一条失败消息,告诉您重定向太多或太多

更深入地看一下规则,会发生以下情况:

10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe85288af18/initial] (3) [perdir /home/account/public_html/] strip per-dir prefix: /home/account/public_html/asdasdas2 -> asdasdas2
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe85288af18/initial] (3) [perdir /home/account/public_html/] applying pattern '.*' to uri 'asdasdas2'
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe85288af18/initial] (2) [perdir /home/account/public_html/] rewrite 'asdasdas2' -> '/home/account/public_html/edit.php'
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe85288af18/initial] (2) [perdir /home/account/public_html/] trying to replace prefix /home/account/public_html/ with /
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe85288af18/initial] (5) strip matching prefix: /home/account/public_html/edit.php -> edit.php
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe85288af18/initial] (4) add subst prefix: edit.php -> /edit.php
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe85288af18/initial] (1) [perdir /home/account/public_html/] internal redirect with /edit.php [INTERNAL REDIRECT]
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe852858798/initial/redir#1] (3) [perdir /home/account/public_html/] strip per-dir prefix: /home/account/public_html/edit.php -> edit.php
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe852858798/initial/redir#1] (3) [perdir /home/account/public_html/] applying pattern '.*' to uri 'edit.php'
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe852858798/initial/redir#1] (2) [perdir /home/account/public_html/] rewrite 'edit.php' -> '/home/account/public_html/edit.php'
10.0.0.1 - - [24/Aug/2013:05:25:24 --0300] [somedomain.com/sid#7fe8521040e0][rid#7fe852858798/initial/redir#1] (1) [perdir /home/account/public_html/] initial URL equal rewritten URL: /home/account/public_html/edit.php [IGNORING REWRITE]

当你说“内部和上方”时,“内部和上方”是什么意思?@Pacerier和上方是指public\u html中的文件夹,例如
public\u html/css
public\u html/images
这些是它里面的文件夹,符号链接可以是一个内部文件夹
ln-s/test/home/yccaucom/public\u html/test/
会在你的
public\u html
My.htaccess文件(/home/yccaucom/public\u html/.htaccess)里面创建一个
/test
符号链接只有一行:
RewriteRule.*/home/yccaucom/public\u html/my\u page.php[last,noescape]
。你说我将有无限重定向,但我没有:为什么我没有无限重定向?@Pacerier你还有其他的.htaccess吗?@Pacerier我是说它会陷入无限循环,因为你的规则告诉我将所有东西重定向到my_page.php,在那里它会将自己重定向到自己,这就是为什么。当你说“在内部和上方”时“及以上”是什么意思?@Pacerier及以上是指public_html中的文件夹,例如
public_html/css
public\u html/images
这些是它里面的文件夹,符号链接可以是一个内部文件夹
ln-s/test/home/yccaucom/public\u html/test/
会在你的
public\u html
My.htaccess文件(/home/yccaucom/public\u html/.htaccess)里面创建一个
/test
符号链接只有一行:
RewriteRule.*/home/yccaucom/public\u html/my\u page.php[last,noescape]
。你说我有无限重定向,但我没有:为什么我没有无限重定向?@Pacerier你有其他的.htaccess吗?@Pacerier我是说它会陷入无限循环,因为你的规则告诉我将所有东西重定向到my_page.php,在那里它会将自己重定向到自己,这就是为什么。