Apache htaccess重写用于获取主机名以外的所有内容的规则

Apache htaccess重写用于获取主机名以外的所有内容的规则,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我需要一个htaccess重写规则来获取主机名之外的所有内容,并将其用作参数。例如,我想被 我想应该很简单,但我找不到很好的组合。 谢谢试试这样的方法: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ category.php?cat=$0 [B] 如果您也要传递查询字符串,请确保将B标志更改为B,QSA,但请注意,随后可能会有人

我需要一个htaccess重写规则来获取主机名之外的所有内容,并将其用作参数。例如,我想被

我想应该很简单,但我找不到很好的组合。
谢谢

试试这样的方法:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ category.php?cat=$0 [B]

如果您也要传递查询字符串,请确保将
B
标志更改为
B,QSA
,但请注意,随后可能会有人传递GET参数
cat
,这将覆盖您在重写中设置的内容。如果你需要的话,有一些变通方法可以解决这种情况,但除此之外,这些方法应该可以解决你的问题。

这就是我想到的:

RewriteRule ^/?([^\./]*)[:;,\.]*$ category.php?cat=$1 [L,NS]

有人想办法改进吗?

谢谢你,蒂姆。我在任何地方都找不到[B]标志。你能解释一下或者给我指一些关于它的信息吗?哦,我实际上认为这只是2.0文档中的一个疏忽,但从源代码看,它在Apache2.2之前是不存在的……所以如果你的站点在2.0上,就不要使用它。无论如何,它都会逃避反向引用,因此无论出于何种原因,如果您拥有
example.com/this&that
,您都不会通过重写获得
cat=this
this=
,因为将对符号进行编码。