Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.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 mod_重写隐藏文件扩展名_Php_.htaccess_Mod Rewrite - Fatal编程技术网

Php mod_重写隐藏文件扩展名

Php mod_重写隐藏文件扩展名,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,my.htaccess对所有请求使用主“files.php”。 在my files.php中,我有一些包含HREF的代码,如下所示: RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^/([a-z0-9-_]+)/([a-z0-9-_]+)/?$ RewriteRule ^(.*) http://%{HTTP_HOST}/%1.php?q=%2 [P] /people/john-->当一个人点击这个时,它应该转到:p

my.htaccess对所有请求使用主“files.php”。 在my files.php中,我有一些包含HREF的代码,如下所示:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/([a-z0-9-_]+)/([a-z0-9-_]+)/?$
RewriteRule ^(.*) http://%{HTTP_HOST}/%1.php?q=%2 [P]
/people/john
-->当一个人点击这个时,它应该转到:
people.php?q=john
但是,当用户单击此
/people/john
时,my.htaccess不会重定向。 顺便说一句,url应该总是说
/people/john
而不是
people.php?q=john
,即使这是幕后发生的事情

只是想说,我有

Options +FollowSymLinks 
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) /files.php?q=$1

RewriteCond %{HTTP_HOST} ^mysite.com
RewriteRule (.*) http://m.mysite.com/$1 [R=301,L]

AddHandler application/x-httpd-php5 .html .htm .txt .php

我一直在这里苦苦寻找,希望能找到准确的答案,但仍然没有运气。我感谢所有的答复

是否要使其动态化?我的意思是,
/$anything1/$anything2
将被重新映射到
/$anything1.php?=$anything2

/city/newyork --> city.php?q=newyork
/country/australia --> country.php?q=australia 
或者,如果上述代码不起作用,请尝试以下操作:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/([a-z0-9-_]+)/([a-z0-9-_]+)/?$
RewriteRule ^(.*) /%1.php?q=%2

根据您的示例,您得到的url如下所示:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/([a-z0-9-_]+)/([a-z0-9-_]+)/?$
RewriteRule ^(.*) http://%{HTTP_HOST}/%1.php?q=%2 [P]
如果这是您想要的,请尝试以下方法: 选项+FollowSymLinks 重新启动发动机

/city/newyork, where city is the php file to call with parameter newyork

下面是我对CodeIgniter的使用(支持非常深的a/b/c/d/e/f/g)

基本上一行一行地写着
-打开重写引擎
-使用web_root(如果您在子文件夹中,则它可能不适合您)
-如果url不是现有文件
-并且url不是现有目录
-将参数映射到files.php

刚刚意识到您正在使用Files.php。。。奇怪的是,如果它是所有东西都应该通过的路径,那么应该将其称为索引以保持一致性,或者创建一个索引,将文件夹/文件/*路由到index.php?tab=files&


希望这对Faa有所帮助,我照你说的做了,下面是我的服务器变量,我认为正确的变量应该是下面写着“应该是这个”的变量


你并不孤单,mod_重写规则可能会让人困惑。我很想看到这个问题的解决方案……我们需要看到您正在谈论的代码;我们不能仅仅因为知道它不起作用而有所帮助。G-Nuggets,我的代码包含在上面。所有url都在“files.php”中处理,因此files.php就像处理所有内容的主索引或目录。因此,它包含如下内容:/city/newyork等。在url上,它看起来像是/city/newyork,但在场景背后,这实际上是渲染的脚本:city.php?q=newyork。我想@G-Nugget(和我们其他人)希望看到的是一个示例href-整个标签。请包括2到3个不同的例子来演示href中的url。files.php代码本身是直接的,基本上我是在查询数据库并将用户信息插入href。当我使用country.php?q=australia强制它时,代码运行平稳,问题是当我尝试单击浏览器上的href链接时,什么都没有发生,它基本上停留在屏幕上,并闪烁。谢谢你的评论。谢谢,但它仍然不起作用,我正在使用cpanel,你认为除了。htaccess还有什么我应该寻找的吗?就像在apache虚拟主机中一样?也许有些东西设置不正确?谢谢,但它仍然不起作用,我正在使用cpanel,你认为除了。htaccess还有什么我应该寻找的吗?就像在apache虚拟主机中一样?也许有些东西设置不正确?你有不定式循环吗?我认为它在重写规则行的末尾缺少了一个[L]。哦,天哪,你的解决方案太接近了,所以文件夹结构可以工作,但是当我只有www.mywebsite.com/newyork时,它正在将其更改为www.mywebsite.com/newyork.php,它应该是www.mywebsite.com/myfiles.php?q=newyork,我们需要修复重写条件,但你的答案就要结束了!!!帮帮我:)别忘了url应该始终为:www.mywebsite.com/newyork有没有办法在mod rewrite中说出if else语句?因为你的答案适用于/city/newyork,但是如果我只有/newyork/这是一个正确的答案,那么它就会崩溃。我不得不将$\U REQUEST['q']更改为$\U SERVER['REQUEST\U URI'],这是一个魅力,我花了好几天的时间,谢谢你!!谢谢,但它仍然不起作用,我正在使用cpanel,你认为除了。htaccess还有什么我应该寻找的吗?就像在apache虚拟主机中一样?也许有些东西设置不正确?发生了什么事?你真的想重写它们还是重定向它们?根据您的问题,您的
重写引擎
正在工作。无论如何,你可以查看我上面的更新。杰罗恩的解决方案很快就能找到答案。因此,他的代码基本上是可以工作的,然而,服务器正在做这件事:www.mywebsite.com/newyork.php,正如它应该是www.mywebsite.com/myfiles.php?q=newyork一样,url也应该像www.mywebsite.com/newyork这样整洁和酷,“重定向查询字符串”是
“q=city/newyork”
,因此重定向是有效的。如果只需要
“q=newyork”
,请不要输入city/newyork,在浏览器的栏或链接中只输入/newyork。很简单,规则会传递整个URI路径,因为这是您告诉它对(*)组所做的。要将
city
从组中排除,请将规则更改为
RewriteRule^city/(.*)/myfiles.php?q=$1[R,L]
,但问题不在于规则。问题在于PHP代码,正如我多次提到的。脚本中的代码,该代码应该能够将GET查询字符串分解或分离为相应的参数。像现在这样拥有整个URI路径很重要,所以不要更改规则,而是更改代码。关于如何做你需要的事情,有上百个例子,所以在这里删除你的答案,什么也不回答,然后发布另一个问题,询问代码。Faa,我发布的是两个不同服务器的完全相同的代码,做同样的事情,但是,另一个服务器就是出现问题的服务器。规则和代码是复制的,但在两个不同的服务器上共享,你认为这是问题所在吗?当然,如果两个URL结构不相同,可能会出现问题。如果没有
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ files.php?/$1 [L]
["QUERY_STRING"]=>
  string(17) "q=city/newyork"
  ["REDIRECT_QUERY_STRING"]=>
  string(17) "q=city/newyork"
  ["REDIRECT_STATUS"]=>
  string(3) "200"
  ["REDIRECT_URL"]=>
  string(16) "/city/newyork"
["REQUEST_URI"]=>
  string(16) "/city/newyork"
  ["SCRIPT_FILENAME"]=>
  string(30) "/home/mywebsite/myfiles.php"
  ["SCRIPT_NAME"]=>
  string(14) "/myfiles.php"
["PHP_SELF"]=>
  string(14) "/myfiles.php"
  ["argv"]=>
  array(1) {
    [0]=>
    string(17) "q=city/newyork"
  }




should be this:
["QUERY_STRING"]=>
  string(16) "q=newyork"
  ["REDIRECT_QUERY_STRING"]=>
  string(16) "q=newyork"
  ["REDIRECT_STATUS"]=>
  string(3) "200"
  ["REDIRECT_URL"]=>
  string(25) "/city/newyork"
["REQUEST_URI"]=>
  string(25) "/city/newyork"
  ["SCRIPT_FILENAME"]=>
  string(30) "/home/mywebsite/city.php"
  ["SCRIPT_NAME"]=>
  string(14) "/city.php"
["PHP_SELF"]=>
  string(14) "/city.php"
  ["argv"]=>
  array(1) {
    [0]=>
    string(16) "q=newyork"
  }