我有一个非常简单的重写规则,但它不工作。
我有以下几点:
#old see edits for newer versions RewriteCond %{HTTP_REFERER} ^localhost:8080(/|$) RewriteRule ^/downloads/.* /somePackage/index.php?id=5 [NC,C] RewriteRule ^/downloads /somePackage/index.php?id=2 [NC,L]
它似乎没有通过RewriteCond
,为什么是这样呢?
当我尝试这个:
RewriteRule downloads/? /somePackage/index.php?id=2 [NC,L]
它似乎工作localhost:8080/downloads
但是当我尝试:
RewriteRule downloads/.*/? /somePackage/index.php?id=5 [NC,L]
它不起作用,为什么这不起作用? 我应该怎么做呢?
编辑:
我这是目前的代码,只适用于localhost:8080/downloads
和localhost:8080/downloads/
但不是当我添加一些东西后斜线
RewriteRule downloads/somedownload/? /somePackage/index.php?id=5 [NC,L] RewriteRule downloads/? /somePackage/index.php?id=2 [NC,L]
编辑2:
这里是使用的.htaccess代码。
# Only the URLs /downloads and /downloads/ (with and without trailing slash) RewriteRule ^downloads/?$ /somePackage/index.php?id=2 [NC,L] #gives 404 - Category not found RewriteRule ^downloads/ignis_desktop$ /somePackage/index.php?id=5 [NC,L] # Everything else that starts /downloads/<something> RewriteRule ^downloads/. /somePackage/index.php?id=5 [NC,L]
我似乎无法find404的解决scheme。
然而, [r=301]
似乎正确地redirect到页面,但它打破了重写的目的:使url幻想。
HTTP_REFERER
(如果设置)是以scheme开始的绝对URL。 例如。
http://localhost:8080/....
所以,一个CondPattern如^localhost:8080(/|$)
永远不会匹配。
还要注意, RewriteCond
指令只适用于下面的单个RewriteRule
,而不是所有的,因为你的第一个代码示例似乎暗示。
RewriteRule ^/downloads /somePackage/index.php?id=2 [NC,L]
RewriteRule
模式 (如^/downloads
(即以斜线开头的URLpath))在每个目录.htaccess
文件中都不会匹配。 在.htaccess
文件中,目录前缀在模式匹配之前首先从URLpath中移除。 所以,这需要^downloads
以匹配所有以/downloads
开头的url。
RewriteRule downloads/.*/? /somePackage/index.php?id=5 [NC,L]
由于该模式需要结尾斜杠,因此不会与localhost:8080/downloads
匹配。
更新:
我想
localhost:8080/downloads
去id=2
和localhost:8080/downloads/somedownload
去id=5
和localhost:8080/downloads/anotherdownload
去id=6
然而,我已经压缩它的问题/downloads/<everything-else>
转到id=5
我假设/downloads
不是文件系统上的物理目录。 在这种情况下,您应该在RewriteRule
模式上使用string锚点( $
)的结尾,或者小心放置这些指令的顺序(即最具体的第一个)。
尝试以下操作:
# Only the URLs /downloads and /downloads/ (with and without trailing slash) RewriteRule ^downloads/?$ /somePackage/index.php?id=2 [NC,L] # Everything else that starts /downloads/<something> RewriteRule ^downloads/. /somePackage/index.php?id=5 [NC,L]
你是否应该捕捉/downloads
和/downloads/
– 理想情况下,它应该是一个或另一个是有争议的。
要捕获特定的URL(例如/downloads/somedownload
),那么这将需要在“其他…”规则之前:
RewriteRule ^downloads/somedownload$ /somePackage/index.php?id=5 [NC,L]
我已经find了解决我的问题,
我已经改变了这个:
RewriteRule ^downloads/somedownload$ /somepackage/index.php?option=com_content&view=article&id=5
虽然在我的菜单中,我可以参考这样的网页:
localhost:8080/home
它会重写它:
RewriteRule ^home/? /somepackage/index.php?id=1 [L,NC]