Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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
Php .htaccess多个重写规则/优先级排序_Php_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

Php .htaccess多个重写规则/优先级排序

Php .htaccess多个重写规则/优先级排序,php,.htaccess,mod-rewrite,url-rewriting,Php,.htaccess,Mod Rewrite,Url Rewriting,以下是我当前的htaccess文件: RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.website\.com [NC] RewriteCond %{HTTP_HOST} ([^.]+)\.website\.com [NC] RewriteRule ^(.*)$ http://www.website.com/gotourl.php?urlid=?%1 [L] RewriteRule ^(\w+)$ ./gotourl.php?urlid=

以下是我当前的htaccess文件:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.website\.com [NC]
RewriteCond %{HTTP_HOST} ([^.]+)\.website\.com [NC]
RewriteRule ^(.*)$ http://www.website.com/gotourl.php?urlid=?%1 [L]
RewriteRule    ^(\w+)$ ./gotourl.php?urlid=$1    [NC,L]    
RewriteRule    ^(\w+)/$ ./gotourl.php?urlid=$1    [NC,L]   
这个有问题的网站是一个网址缩短器,我正在进行测试/开发和个人使用。上面的代码可能并不理想,因为我对.htaccess不太熟悉,并通过谷歌搜索和测试实现了这一点。这就是我希望它在URL缩短方面所做的:

http://website.com/1234 -> http://website.com/gotourl.php?urlid=1234
http://website.com/1234/ -> http://website.com/gotourl.php?urlid=1234
问题是我不知道如何让它忽略某些目录。我希望特定目录转到特定页面:

http://website.com/img (or) http://website.com/img/ -> http://website.com/img.php
http://website.com/img/1234 (or) http://website.com/img/1234/ -> http://website.com/viewimage.php?imgid=1234
主要问题是,我不知道如何正确地执行此操作,我尝试过的方法总是重写为:

http://website.com/gotourl.php?urlid=XXXX
或者在无限的重定向循环中结束,而不是转到我想要的特定页面。感谢您的帮助

本质上,我正在寻找帮助来编写我的htaccess,以便执行以下操作:

URL user visits -> URL user sees
http://website.com/img -> http://website.com/img.php
http://website.com/img/XXXX -> http://website.com/viewimage.php?imgid=XXXX
http://website.com/XXXX -> http://website.com/gotourl.php?urlid=XXXX
所有路径都应使用或不使用尾随斜杠


希望得到帮助,让它做到这一点,并解释一下每一行的实际含义,以便我可以从中学习。

您想要更改的主要内容是使您的规则更加具体。缩短的url可能不能包含斜杠或点,因此您可以将两个url缩短url都更改为:
RewriteRule^([^/\.]+)/?$gotour.php?urlid=$1[NC,L]
。不过,您需要防止“gotour.php”与之匹配。仅img的规则更为具体,应首先执行。img/something的规则没有那么具体,可以在任何地方

RewriteEngine On

RewriteRule ^img/?$ img.php [L]
RewriteRule ^img/([^/]+)/?$ viewimage.php?imgid=$1 [L]
RewriteCond %{HTTP_HOST} !^www\.website\.com [NC]
RewriteCond %{HTTP_HOST} ([^.]+)\.website\.com [NC]
RewriteRule ^(.*)$ http://www.website.com/gotourl.php?urlid=%1 [L]
RewriteRule ^([^/\.]+)/?$ gotourl.php?urlid=$1 [NC,L]

仅供参考,
http://website.com/img
不是子域。子域url的示例:
http://test.website.com/img
<代码>测试是子域<代码>img是路径。甚至
www
在技术上也是一个网站的子域。@JonathanKuhn-Duh。我也知道:P对不起。现在编辑以删除所有这些子域。我的意思是directory:pyu可能只需要使用如下条件:
RewriteCond%{REQUEST\u FILENAME}.php-f
来检查所请求的路径+.php是否存在,然后重写到该文件中。例如:这对URL缩短和/img/XXXX都有效,但对常规的/img/不起作用。这仍然试图从gotour.php?urlid=img中提取,这会给出一个错误,因为短URL img不存在。您是否复制了上面的代码(即:您是否有相同顺序的规则)?是-复制并粘贴到正确的域中时,除了“网站”之外,不做任何更改。我对第一条规则做了一个小更改:将
/?
添加到第一个参数。这是我能想到为什么它不能正常工作的唯一原因。它应该在url缩短规则之前匹配,
img.php
不应该与url缩短规则匹配。谢谢!那就好一点了。但有两个问题:1)/img/确实让我访问了img.php,但由于某种原因,它没有加载我认为不存在的样式表(页面背景、文本格式等缺失)。2) 没有尾随斜杠的/img将我带到(这是在尝试转到/img后在浏览器中显示的URL)